防止在服务器处理完成之前用户多次点击提交按钮处理代码
程序员文章站
2024-03-06 09:09:43
如果网页速度过慢或者其他原因,用户多次提交能导致数据的修改,怎么解决这个问题呢? 这段是放在 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;";//防止重复提交
下一篇: springMVC几种页面跳转方式小结