在对我的 ASP.NET MVC 应用程序进行日志检查时,我发现一些用户成功地发布了相同的表单两次。我试图重现它,但我失败了。无论如何,我想阻止用户两次发布相同的数据。在 ASP.NET MVC 中是否有任何规范的解决方案,或者我必须开发自己的自定义解决方案?
在自定义解决方案的案例中,我可以想象客户端和服务器端的解决方案。在这两种情况下,你能给我推荐什么吗?
最佳答案
通常的做法是在点击提交按钮后立即禁用它。
像这样的 jQuery 应该可以工作:
<script type="text/javascript">
$("#myform").submit(function()
{ $("#submit-button").attr("disabled", "disabled"); });
</script>
在仔细阅读您的问题并看到您使用 ASP.NET MVC 之后......
双发的原因可能是用户发完后刷新了页面。如果您只是从您的帖子操作中返回一个 View :
[AcceptVerbs (HttpVerbs.Pos)]
ActionResult ProcessUserPost ()
{
/*...*/
return View ();
}
然后浏览器将尝试通过执行相同的步骤重新创建页面,这意味着再次提交记住的表单。一些浏览器会显示一条警告消息 (FireFox),其他浏览器会安静地执行此操作(查看 Opera)。为了避免这种情况,您需要确保用户获得的页面是 GET 请求而非 POST 请求的结果。
基本上,您需要执行重定向而不是返回 View 。这将指示浏览器再次获取页面。
[AcceptVerbs (HttpVerbs.Pos)]
ActionResult ProcessUserPost ()
{
/*...*/
return RedirectToAction ("DisplayTheForm");
}
这种刷新页面的方式不会导致发送新的 POST 请求。
当然,这不会阻止您的用户点击后退按钮返回表单页面再次提交。但这种情况应该在您的业务逻辑中处理,无论您在做什么,检查同一用户是否重复提交了同一订单。
关于javascript - 在 ASP.NET MVC 中防止表单双重发布的可能方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1729726/