ASP.NET 防止按钮重复提交记录几种方法

时间:2015/12/3 16:37:00来源:互联网 作者:flyso 点击: 1073 次

方法一:

解决重复提交:OnClientClick="this.disabled=true;this.form.submit();" UseSubmitBehavior="False"

方法二:

this.btnSubmit.Attributes["onclick"] = this.GetPostBackEventReference(this.btnSubmit) + ";this.disabled=true;"; //防止重复提交


不过我使用下来发现一个问题,就是上面两种方法不能和.net的验证控件同时工作,在网上搜索了很多地方,终于发现比较好的方法:

this.GetPostBackEventReference(this.cmdSubmit);          //保证 __doPostBack(eventTarget, eventArgument) 正确注册
          if (!IsPostBack)
          {
              System.Text.StringBuilder sb = new System.Text.StringBuilder();
              sb.Append("if (typeof(Page_ClientValidate) == 'function') { if (Page_ClientValidate() == false) { return false; }}");      //保证验证函数的执行
              //sb.Append("if(window.confirm('are you sure?')==false) return false;");          //自定义客户端脚本
            sb.Append("disableOtherSubmit();");          // disable所有submit按钮
              sb.Append(this.GetPostBackEventReference(this.cmdSubmit));      //用__doPostBack来提交,保证按钮的服务器端click事件执行
              sb.Append(";");
            cmdSubmit.Attributes.Add("onclick", sb.ToString());
          }


< script language="javascript">
< !--

function disableOtherSubmit()
{ var obj = event.srcElement;
var objs = document.getElementsByTagName('INPUT');
for(var i=0; i<objs.length; i++)
{
if(objs[i].type.toLowerCase() == 'submit')
{
objs[i].disabled = true;
}
}
}

//-->
< /script>
或者将

sb.Append("disableOtherSubmit();");          // disable所有submit按钮
直接换成如下语句即可:

sb.Append("var obj = event.srcElement;")
sb.Append("var objs = document.getElementsByTagName('INPUT');")
sb.Append("for(var i=0; i<objs.length; i++)")
sb.Append("{")
sb.Append("if(objs[i].type.toLowerCase() == 'submit')")
sb.Append("{")
sb.Append("objs[i].disabled = true;")
sb.Append("}")
sb.Append("} ")


Copyright © 2005 - 2016 flyso.cn. 飞搜 版权所有 鄂ICP备11002783号-3