初学者问题 - 我有一个HomeController,HomeModel和HomeView。当用户进入http://page/Home
页面时,会执行Index
方法,并且可以填写一些控件。单击按钮(回发)后,将执行Process操作,如果出现错误,应用程序将调用ModelState.AddModelError
方法。然后再次调用Index
操作,我可以在页面上显示错误。
这样可行,但问题是在回发后新网址为http://page/Home/Index
而不是http://page/Home
。知道如何防止这种情况吗?
PS - 我尝试了this解决方案但是新的网址就像http://page/Home?...long string of serialized ModelState data...
我的控制器:
[HttpGet]
public ActionResult Index(MyModel model)
{
return View(model);
}
[HttpPost]
public ActionResult Process(MyModel model)
{
if (...error...)
{
model.SetErrorState();
ModelState.AddModelError("ProcessError", "error message");
return View("Index", model);
}
else
{
// do something...
model.SetSuccessState();
return View("Index", model);
}
}
答案 0 :(得分:2)
问题是您正在推送HttpPost
操作的新网址。如果您将此更改为HttpPost
操作的Home
版本,则可以整齐地返回到该网页,而不会更改网址时出错。
e.g。
[HttpGet]
public ActionResult Index(ImportData model)
{
return View(model);
}
[HttpPost]
public ActionResult Index(MyModel model, FormCollection data)
{
if (...error...)
{
model.SetErrorState();
ModelState.AddModelError("ProcessError", "error message");
return View(model);
}
else
{
// do something...
model.SetSuccessState();
return View(model);
}
}