在我的 Web 应用程序中,单击 ASP.NET MVC 表单上的提交按钮后,会向用户显示错误屏幕或成功屏幕。在出现错误的情况下,系统会指示用户单击浏览器上的“后退”按钮并修复他们没有正确执行的任何操作,然后再次尝试提交。
这很好用,因为当用户单击返回时,所有先前输入的数据仍然在屏幕的各个字段中。但是在成功屏幕的情况下,如果用户单击返回,我希望数据被清除,这样他们就不会意外地再次重新提交数据。
如何在 ASP.NET MVC 中做到这一点?
在我的 Web 应用程序中,单击 ASP.NET MVC 表单上的提交按钮后,会向用户显示错误屏幕或成功屏幕。在出现错误的情况下,系统会指示用户单击浏览器上的“后退”按钮并修复他们没有正确执行的任何操作,然后再次尝试提交。
这很好用,因为当用户单击返回时,所有先前输入的数据仍然在屏幕的各个字段中。但是在成功屏幕的情况下,如果用户单击返回,我希望数据被清除,这样他们就不会意外地再次重新提交数据。
如何在 ASP.NET MVC 中做到这一点?
实现此目的的方法是使用Post-Get-Redirect模式。它不是特定于 asp-mvc 的,但正如 Wiki 所说
Web 开发人员的一种常见设计模式,可帮助避免某些重复的表单提交,并允许用户代理使用书签和刷新按钮更直观地表现。
单击背面不是处理此问题的安全方法。一些浏览器在提交后不会保持表单状态。这种模式直接解决了accidentally re-submit
数据问题。
在代码方面,请查看Jag Reehal的这篇博客文章,了解如何对控制器进行单元测试。
[HttpPost]
public ActionResult Create(SomeViewModel model)
{
if (ModelState.IsValid)
{
// do some stuff that saves your data and then...
return RedirectToAction("Success");
}
else
{
// your model is not valid so return the form back to the user for
// additional modifications.
return View(model);
}
}
注意:虽然以上ModelState
用于数据验证,但您可能有自己的一组验证和错误检查例程,也可以在此模式中使用。