如何防止用户重复提交

qz362100 2017-03-24 03:02:12
现在在做一个提交功能。用C#如何防止用户重复提交呢?
...全文
916 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdfgrtyu 2017-04-25
  • 打赏
  • 举报
回复
浏览器自带这个功能...
scailin 2017-04-25
  • 打赏
  • 举报
回复
前端是可以限制正常操作用户不能重复提交请求,但是如果用户写请求恶意多次提交就绕过了前端。 服务器端实现功能时就要添加验证。
天空丶蒋 2017-03-29
  • 打赏
  • 举报
回复
1.前端做处理,提交后让用户不能再点击了。 2.后台做验证。
plcly1 2017-03-29
  • 打赏
  • 举报
回复
幂等,带个ID进来,这个ID只执行一次
淡悸优伤 2017-03-29
  • 打赏
  • 举报
回复
提交之后成功跳转到别处 禁用提交按钮,弹出提示 都可以啊
弘毅致远 2017-03-27
  • 打赏
  • 举报
回复
采用ajax提交,在提交发起之后,弹出遮罩,请求结束消除遮罩。
长空X 2017-03-27
  • 打赏
  • 举报
回复
支持2楼..我的想法也差不多..点提交后,显示一个正在提交字样...然后后台判断是不是重复数据,然后再前台显示
Poopaye 2017-03-27
  • 打赏
  • 举报
回复
引用 5 楼 qz362100 的回复:
[quote=引用 2 楼 hanjun0612 的回复:] 同上 无论是否使用ajax,在用户提交后,显示一个等待页面,禁用按钮。 提交完成后,恢复按钮。
这个提交是做成api形式提交的[/quote] api形式这个词楼主自己发明的吧
  • 打赏
  • 举报
回复
比如说你的 Grid 列表编辑区域底下有一个“Add Item”按钮,你采用 asp.net 这种一遍遍刷页面(此时在服务器端有Add Item 操作)、响应有延迟的形式,于是希望在没有把最后一行填上数据内容时,不让用户重复 Add Item,那么应该按照这个业务描述来编程,也就是在客户端重复提交时,服务器端可以检查是否最后一行已经填入过数据。 先把服务器端业务流程设计好,你的软件会一看就是是个靠谱的人设计开发的。不是只知道界面的人做的软件。
吉普赛的歌 2017-03-27
  • 打赏
  • 举报
回复
#6是对的, 这是 js 的事情而不是 C# 的事情
  • 打赏
  • 举报
回复
比如说所谓的 webform 的 GridView 的编辑操作,其“确认”是完全可以重复的,那么就不应该去做过多的限制。 而再比如说“审核签字”按钮,其提交时,你本来就能通过单据编号来首先判断数据库中的数据有没有已经审核过,所以你在服务器编程逻辑上就有“判断重复提交”的必要信息。不要把这个责任推给客户端,客户端只是用来提高用户体验度的、而不是保证业务数据逻辑的,把责任推给客户端不是好的软件开发意识。
  • 打赏
  • 举报
回复
“如何防止用户重复提交”这个问题,不要只关心客户端编程。你至少要关心服务器端编程设计,如何防止客户端重复提交,而可以忽视客户端。
  • 打赏
  • 举报
回复
不管用什么编程语言,重要地是考虑到这个是跨进程、跨应用、用网络的,服务器端不能想当然地依赖于某个客户端程序,设计上你要让服务器能稍微主动一点去识别“重复提交”,然后次要地才是客户端去修改。 比如说假设客户端是按照一个交易的“行号”来提交数据,那么你就要在信令协议设计上有区分“Create、Modify”操作的不同,重复提交时服务器就可以判断是不是已经有这一行数据了!而不是用一个“Submit”操作。 比如说“扣款”操作,设计流程时就应该是客户端提交的信令中有一个 Guid-ID 编号,这样当客户端重复 Create 多次时,你的服务器立刻可以给拒绝服务。 只有服务器设计、信令设计上已经可以避免“重复提交”了,等有闲工夫的时候,再去研究客户端用什么技巧去给用户提示、确保用户操作不会误解,这才好。如果你把精力都放在客户端编程设计上,等于是丢了西瓜捡了芝麻。
Hertz_liu 2017-03-24
  • 打赏
  • 举报
回复
如果你是webform以事件驱动的方式,那你就在执行完后做个重定向吧,简单
正怒月神 版主 2017-03-24
  • 打赏
  • 举报
回复
楼上的ajax可能括号没删干净,你自己注意一下。 主要是beforeSend和complete
正怒月神 版主 2017-03-24
  • 打赏
  • 举报
回复
引用 5 楼 qz362100 的回复:
[quote=引用 2 楼 hanjun0612 的回复:] 同上 无论是否使用ajax,在用户提交后,显示一个等待页面,禁用按钮。 提交完成后,恢复按钮。
这个提交是做成api形式提交的[/quote] 那就是1楼说的ajax提交,你可以这么玩
$.ajax({
                type: "post",
                dataType: "json",
                data: data,
                url: "",
                beforeSend: function () {
                    layer.load();        //打开一个遮罩层,或者直接禁用你的按钮
                },
                complete: function () {
                    layer.close(layer.load());     //取消遮罩层,或者回复按钮
                },
                success: function (d) {
                        }  
            });
        }
qz362100 2017-03-24
  • 打赏
  • 举报
回复
引用 2 楼 hanjun0612 的回复:
同上 无论是否使用ajax,在用户提交后,显示一个等待页面,禁用按钮。 提交完成后,恢复按钮。
这个提交是做成api形式提交的
丰云 2017-03-24
  • 打赏
  • 举报
回复
我通常是做一个遮罩层,提交时弹出,结束时收起,这样非常简单有效
快乐起航2020 2017-03-24
  • 打赏
  • 举报
回复
支持1喽
正怒月神 版主 2017-03-24
  • 打赏
  • 举报
回复
同上 无论是否使用ajax,在用户提交后,显示一个等待页面,禁用按钮。 提交完成后,恢复按钮。
加载更多回复(1)

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧