当前位置: 移动技术网 > IT编程>开发语言>.net > 防止在服务器处理完成之前用户多次点击提交按钮处理代码

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

2017年12月12日  | 移动技术网IT编程  | 我要评论

谷村奈南,吴家怿,林口新闻

如果网页速度过慢或者其他原因,用户多次提交能导致数据的修改,怎么解决这个问题呢?
这段是放在 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;";//防止重复提交

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网