asp.net按钮多次提交数据解决方法

   朋友的一个项目遇到一个问题,点击按钮提交数据时,如果不小心迅速双击提交按钮,数据就被提交了2次,造成了很多不必要的损失,甚是烦恼中。

    看了一下他的代码,前端页面是一个submit类型的HTML按钮:

<input type="submit" value="确 认" id="Submit1" name="Submit1" runat="server"  style="FONT-WEIGHT: bold; FONT-SIZE: 18pt"

    后置代码里面有个对应的private void Submit1_ServerClick(object sender, System.EventArgs e)函数提交数据。

    里面已经有一句Submit1.Disabled = true;放在第一句,表明已经考虑了禁止双击。

    那为十么还是会出现提交2次的情况呢?考虑该句代码要在服务器端执行,响应较慢。在网速比较慢的情况下,很容易造成用户的双击快于按钮的disable。原因找到了,就要考虑结解决办法,首先考虑使用JS来disable按钮,客户端执行,响应速度很快。

    于是写了个JS禁用按钮的函数:function disableBtn() { Form1.Submit1 .disabled =true;  }。按钮的代码改为:<input type="submit" value="确 认" id="Submit1" name="Submit1" runat="server" onclick="disableBtn()" 。结果发现点击后按钮立即变灰,后置代码却没有执行,不能提交数据。

    没辙了,再去网上搜一把,好多办法都试了,包括使用onserverclick,都没有用,那么就自己再改改吧。

最后改成:

JS:function disableBtn() { Form1.Submit1 .disabled =true; return true; }

按钮:<input type="button" value="确 认" id="Submit1" name="Submit1" runat="server" onclick="javascript:if(disableBtn())"

后置代码函数里面最后加了一句:Page.RegisterStartupScript( "enBtn ",   " <script> document.getElementById( 'Submit1 ').disabled=false; </script> ");
   试了一下,没想到OK了,点击一次后按钮立即变灰,同时数据仅提交一次。严重注意按钮的type必须是button,不能是submit,而且不能使用asp.net的服务器按钮控件偶!

代码照上修改后朋友试运行了一个晚上,没有任何问题!bug解决了!


posted @ 2011-02-20 01:33  bingzer  阅读(268)  评论(0)    收藏  举报