我知道这可能已经被问过好几次了,但我看到的大多数(如果不是全部)解决方案都涉及到javascript解决方案或禁用form/submit按钮,而我并不喜欢这样做。
我有两个巨大的表格,可能需要一些时间来完成提交,这可能让用户在第一次提交期间多次重新提交,这将最终导致许多记录在数据库中。
提出的解决方案:
建议的解决方案是有一个包含所有已提交表单ID的数组的泛型方法,每次用户提交表单时,如果该数组不存在,它的ID将被添加到该数组中,在提交完成后,ID将弹出数组。如果用户打开两个或多个相同表单的页面并同步提交,则此解决方案存在缺陷,但这可能会引起以后的担忧。
我的问题是,我提出的解决方案是否可行,它能有多好?我如何实现这个泛型方法?
我知道Apache Struts 2框架有一些解决方案来防止这样的事情(令牌拦截器),如何在MVC 4中做到这一点?
发布于 2013-12-18 10:30:51
只需向视图绑定的ViewModel添加GUID字段(您使用的是ViewModels,对吗?)每次请求空表单时,为其生成一个新GUID (解决了由同一用户下载两个或多个副本的问题),并将其作为一个隐藏字段(它的字符串表示)包含在视图中。然后,您可以在会话变量甚至基于数据库的解决方案中实现您正在讨论的数组解决方案,在该解决方案中,所有处理的GUID都保存在一个经常被清除的表中,一个包含GUID列表的文本文件等,很难根据您提供的内容来选择一个完整的解决方案。但以上所述应能为您提供您所概述的所有要求。
https://stackoverflow.com/questions/20654655
复制相似问题