常见的Web问题是用户多次单击表单的提交按钮,因此服务器不止一次地处理表单.当用户点击已提交表单的后退按钮并因此再次处理时,也会发生这种情况.
什么是阻止ASP.NET MVC发生这种情况的最佳方法?
我认为的可能性是:
还有更多吗?
是否有任何特定的实现?
我可以看到第三个选项被实现为具有HtmlHelper扩展的ActionFilter,其方式与防伪内容类似.
期待收到MVC'ers的消息.
我有一个ASP.NET MVC 3应用程序,它有一个名为的post post Create:
[HttpPost]
public virtual ActionResult Create(Issues issues)
{
if (ModelState.IsValid)
{
context.Issues.Add(issues);
context.SaveChanges();
return RedirectToAction("Index");
}
return View(issues);
}
Run Code Online (Sandbox Code Playgroud)
如果我错误地双击提交按钮,它将创建2x问题.有没有办法防止这种情况,没有使用javascript和禁用按钮,我认为使用a的全部用途RedirectToAction是通过使用Post/Redirect/Get设计模式来防止这种情况?
我希望得到一些关于我打算用来防止 ASP.NET MVC 4 应用程序中重复记录的方法的反馈,以及我没有想到的对用户体验的影响。
Web 表单有六个输入字段和一个保存按钮(以及一个取消按钮),用户最多可能需要 10 分钟来填写表单。
通过帖子提交字段后,页面将在成功/失败时重定向到不同的页面,然后使用新的 Guid 作为主键将数据记录在数据库表中。
为了阻止用户多次按下保存按钮,但允许浏览器在关闭的连接上重新发布请求,我打算在呈现表单时为新记录的主键提供 Guid 作为隐藏的输入字段。
如果发生repost,或者用户多次按save,数据库服务器会因为key重复而拒绝记录的第二个post,我可以在服务器端检查和处理。
但这会给我带来更大的问题吗?