【发布时间】:2012-06-29 13:34:26
【问题描述】:
我正在使用 PRG 来清理我在 MVC 中的帖子
在 POST 操作中,我使用操作过滤器将控制器模型状态存储在 tempdata 中,然后重定向到重新加载模型状态的 GET 方法。
GET 和 POST 操作标头:
[ImportModelStateFromTempData]
public ActionResult Details(int id) {
var object = load(id);
return View(object);
}
[HttpPost]
[ExportModelStateToTempData]
public ActionResult Details(MyViewModel model) {
update(model); return RedirectToAction("Details", new { id = model.id })
}
如果发生错误,我在发布操作中添加一个错误到模型状态,这使模型状态无效,然后重定向到获取操作。
我的问题是如何才能最好地确定模型在发布后处于错误状态的 GET“详细信息”操作?如果模型状态无效,我想跳过逻辑...
var object = load(id);
在 GET 操作中。我试过 ModelState.IsValid 但这不起作用。
【问题讨论】:
-
您可以询问 Modelstate 是否有效(它会根据数据注释检查自己): if (!ModelState.IsValid) { //do your thing }。您还可以为“特殊”验证添加自己的模型状态错误:ModelState.AddModelError(yourProperty, aMessage);..虽然我不确定我是否真的理解您的问题..
-
@Team-JoKi 他正在使用从 POST 请求导入 TempData 的操作过滤器,因此他遵循 PRG 模式。 POST 到一个动作并且 ModelState 有效,将模型状态推送到 TempData 中,然后重定向到 GET 动作,然后将导入该 ModelState 以便表单突出显示适当的验证器,等等。
-
您不应该只测试“如果 modelState.IsValid ... 进行重定向”,否则只需将模型返回到您所在的视图?您想在运行任何更新之前测试有效性
标签: c# asp.net-mvc post-redirect-get