2013-12-18 222 views
0

我知道这已经被问了好几次了,但是我见过的大多数(如果不是全部的话)解决方案涉及到javascript解决方案或禁用表单/提交按钮,我不喜欢这种方式。防止重复表单提交MVC 4

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

提出的解决方案:

甲提出的解决方案是有一个通用方法,该方法具有一个阵列,包括提交的所有形式的ID,每当用户提交一个表单,它的ID将被添加到该阵列如果它不存在,在提交完成后ID将被弹出阵列。如果用户打开同一表单的两个或多个页面并同步提交它们,则可以将此缺点计算在此解决方案上,但以后可能会担心。

我的问题是我的建议解决方案有多可行,它有多好?以及我如何实现这种通用方法?

据我所知,Apache Struts 2框架有一些解决方案来防止这样的事情(Token Interceptor),怎么做,在MVC 4 ?:

回答

1

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