在传统的ASP MVC POST操作中,用户修改的模型将直接返回到视图,如Darin's answer中所述:
if (!ModelState.IsValid)
{
return View(model);
}
但是,使用严格的Post-Redirect-Get模式described on SO here和and by Kazi Manzur Rashid here(#13),将保留ModelState,但会在原始GET操作上重新创建模型。那么用户如何获得她输入的值?
if (!ModelState.IsValid)
{
return RedirectToAction("index");
}
我看到我使用的浏览器会恢复值,但这依赖于浏览器。这是我可以依赖的标准浏览器行为吗?我错过了一些明显的东西吗?
答案 0 :(得分:0)
我认为你不了解Post-Redirect-Get。您回发到首先渲染表单的同一视图。如果出现错误,您只需返回视图即可。只有在提交有效且成功的情况下才会重定向到新视图。
为了说明,所有Post-Redirect-Get样式工作流程都将包含以下形式的操作:
// Original GET that returns form to user
public ActionResult SomeForm()
{
return View();
}
// Receives posted data and returns same view, based on having the
// same action name
[HttpPost]
public ActionResult SomeForm(PostDataModel model)
{
if (ModelState.IsValid)
{
// save to database or whatever
// Success, so you redirect
return RedirectToAction("SomeFormSuccess");
}
// Errors, so you return view
return View(model);
}
// Totally separate action that serves as place to drop the user so
// refreshing the page does not resubmit the form. If you want to
// redisplay the data the user posted, you query it back from the
// database or wherever else it was stored.
public ActionResult SomeFormSuccess()
{
return View();
}
答案 1 :(得分:-1)
这听起来很适合MVC的TempData
属性包,它允许您将数据存储在一个请求中,并在下一个请求中访问它。