asp.net vs2005 如何防止按钮重复提交记录

asp.net vs2005 如何防止按钮重复提交记录
 

在网上搜索了一下发现有下面几种方法:


解决重复提交: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("} ")

posted on 2008-05-15 15:35  Kyo.枫  阅读(1067)  评论(1编辑  收藏  举报