防止重复的表单提交MVC 4

时间:2013-12-18 09:49:43

标签: asp.net-mvc-4 post ihttphandler

我知道这可能会被问到好几次,但我见过的大多数(如果不是全部)解决方案都涉及javascript解决方案或禁用表单/提交按钮,我不喜欢这样做。< / p>

我有几个庞大的表单可能需要一些时间来完成提交,这可能会让用户在第一次提交期间多次重新提交,这最终将导致数据库中的许多记录。

建议的解决方案:

建议的解决方案是使用泛型方法,该方法具有包含所有提交的表单ID的数组,每次用户提交表单时,如果该数组尚未存在,则该ID将添加到该数组中,提交完成后,ID将弹出数组。如果用户打开同一表单的两个或多个页面并同步提交它们,可以在此解决方案上计算一个缺点,但这可能会在以后担心。

我的问题是我提出的解决方案有多可行,有多好?以及如何实现该通用方法?

我理解Apache Struts 2框架有一些解决方案来阻止这种事情(Token Interceptor),如何在MVC 4中做到这一点?:

1 个答案:

答案 0 :(得分:1)

只需将GUID字段添加到视图绑定的ViewModel(您正在使用ViewModel吗?),并且每次要求空表单时,生成新的GUID(解决了下载两个或更多副本的问题)用户)并将其作为隐藏字段包含在视图中(字符串表示形式)。然后,您可以在会话变量或甚至基于数据库的解决方案中实现您正在讨论的阵列解决方案,其中所有处理过的GUID都保存在经常清除的表中,包含GUID列表的文本文件等。很难根据你提供的内容选择一个完整的解决方案。但上述内容应该为您提供所列出的所有要求。