您的位置:首页 > 编程语言 > ASP

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

2008-05-15 15:35 555 查看
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("} ")

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
-->
新的分享
章节导航