Asp.net页面防止重复提交

本文介绍了一种在ASP.NET中防止表单重复提交的有效方法。通过使用隐藏字段和客户端JavaScript来标识并阻止重复的表单提交,从而避免了因网络延迟或用户误操作导致的数据冗余问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Asp.net有一个很讨厌的特性,点击一个Button后,如果还在原来的页面的话,按F5刷新的时候会重新执行刚才的那个按钮事件,这个问题比较实用并简单的解决方法就是执行完按钮事件以后重新打开一次页面
另外一个会出现重复提交的情况是:网速比较慢的时候,点击Button可能要等个好几秒才会执行完,这时候有的用户就容易习惯性地再点几次按键,就造成了多次提交,特别是添加新信息的时候,程序中无法判断哪条信息是正常的,哪条是误点击提交的,于是就会全部添加到数据库里面。这种错误信息在开发的时候很难检查出来,因为本地运行程序都比较快,传到服务器上时才会出现这样的问题。有人说在客户端JS代码中把Button禁用掉,如下所示:


后台的Page_Load中添加
btnSend.Attributes["onclick"] = "return checkForm();";

貌似非常完美的解决方法,但经过测试,这种方法根本行不通,这个时候客户的请求并没有提交,在客户端JS代码中把按钮给禁用了,于是客户的请求就永远也提交不了了。

今天中午调试程序,又碰到这个问题,不经意间想起了如下解决方法,不妨一试,原理如下:
页面中放一个隐藏的变量来标识是否已经进行过提交,点击Button的时候根据此变量的值来判断是否是第一次点击,是的话,改变变量的值,并允许提交请求,否则的话提示用户不能重复提交,并返回False。
代码如下:
页面中添加一个HiddenField,ID为"submitted",然后添加如下JS代码:

       function checkForm()
        {
            if(document.getElementById("submitted").value == "submit")
            {
                alert("您的请求正在处理中,请不要重复提交");
                return false;
            }
            document.getElementById("submitted").value = "submit";
            return true;
        } 
后台Page_Load中添加:
btnSend.Attributes["onclick"] = "return checkForm();";
简单测试,OK

下面是在网上看到的两个方法,标记一下,有空试试
解决方法一:
 .Framework2.0中才有的button属性:
 解决重复提交:OnClientClick="this.disabled=true;this.form.submit();" UseSubmitBehavior="False"

解决方法二:
 this.btnSubmit.Attributes["onclick"] = this.GetPostBackEventReference(this.btnSubmit) + ";this.disabled=true;"; //防止重复提交

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值