欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

防止在服务器处理完成之前用户多次点击提交按钮处理代码

程序员文章站 2024-03-04 23:07:42
如果网页速度过慢或者其他原因,用户多次提交能导致数据的修改,怎么解决这个问题呢? 这段是放在 page_load 中 复制代码 代码如下: if(!page.ispostb...

如果网页速度过慢或者其他原因,用户多次提交能导致数据的修改,怎么解决这个问题呢?
这段是放在 page_load 中

复制代码 代码如下:

if(!page.ispostback)
{
system.text.stringbuilder s = new system.text.stringbuilder();
s.append("a();");
s.append(this.getpostbackeventreference(this.button1));
this.button1.attributes.add("onclick",s.tostring());
}
a() 是 js
function a()
{
var ok=document.getelementbyid('button1');
ok.disabled = true;
return true;
}

浓缩后即为
复制代码 代码如下:

btnsave.attributes.add("onclick","this.disabled='true';"+getpostbackeventreference(btnsave));

一个问题稍微困扰了一下,后来解决了,btnsave.attributes.add("onclick","a();"+getpostbackeventreference(btnsave)); 如果a()这个函数还包含其他验证,比如说一些正则验证等,btnsave.attributes.add("onclick","return a();"+getpostbackeventreference(btnsave)); 则不能进行。可以将js代码全部在cs文件中写就ok拉。
复制代码 代码如下:

system.text.stringbuilder s = new system.text.stringbuilder(); s.append("var ok=document.getelementbyid('button1'); ");
s.append("ok.disabled = true; ");
s.append(this.getpostbackeventreference(this.button1));
this.button1.attributes.add("onclick",s.tostring());
//.net 2.0以上
button1.attributes.add("onclick", "this.disabled=true;" + this.clientscript.getpostbackeventreference(button1, ""));


复制代码 代码如下:

<asp:button id="btnsumbit" runat="server" usesubmitbehavior="false" onclientclick="this.value='sumbit';this.disabled=true; " text="sumbit" onclick="btnsumbit_click" />

其他的方法(可供尝试)
方法一
复制代码 代码如下:

protected void page_load(object sender, eventargs e)
{
btn.attributes.add("onclick", "state=true;");
stringbuilder sb = new stringbuilder();
sb.append("if (!state) return;");
sb.append("var button=document.getelementbyidx_x('btn');");
sb.append("button.value='please wait...';");
sb.append("document.body.style.cursor='wait';");
sb.append("button.disabled=true;");
string strscript = "<script>";
strscript = strscript + "var state=false;";
//将函数绑定到页面的onbeforeunload事件:
strscript = strscript + "window.attachevent('onbeforeunload',function(){" + sb.tostring() + "});";
strscript = strscript + "</" + "script>";
page.registerstartupscript("onbeforeunload", strscript);
}
protected void submit_click(object sender, eventargs e)
{
//模拟长时间的按钮处理
system.threading.thread.sleep(2000);
response.write("<script>alert('bbbbbb!!');" + "</" + "script>");
}
<asp:button id="btn" text="submit" onclick="submit_click"
runat="server"/>

方法2
复制代码 代码如下:

<asp:button id="btnsubmit" onclick="submit_click" runat="server" onclientclick="this.disabled=true;this.form.submit();" usesubmitbehavior="false"/>

方法3
复制代码 代码如下:

this.btnsubmit.attributes["onclick"]=this.getpostbackeventreference(this.btnsubmit)+";this.disabled=true;";//防止重复提交