首页  :: 新随笔  :: 订阅 订阅  :: 管理

ZT:如何禁止重复提交

Posted on 2007-05-16 14:22  礼拜一  阅读(421)  评论(0编辑  收藏  举报

转自:http://recordsome.blogsome.com/2006/07/06/p121/

一开始我使用了

this.button_OK.Attributes.Add("onclick""window.document.getElementById(’" + this.Button_OK.ClientID + "’).disabled = true;")


但这样做的结果是server端的button click处理函数不会被执行.

正确的做法是在Page Load中添加代码:

//.net 2.0
string script = ClientScript.GetPostBackEventReference(this.Button_OK, null);
if (!Page.IsPostBack)
{
    System.Text.StringBuilder sb 
= new System.Text.StringBuilder();
    sb.Append(
"window.document.getElementById(’" + this.Button_OK.ClientID + "’).disabled = true;");
    sb.Append(script);
    sb.Append(
";");
    
this.Button_OK.Attributes.Add("onclick", sb.ToString());
}
        

// .net 1.0
string script = this.GetPostBackEventReference(this.button_OK);

If (
!Page.IsPostBack)
{
    System.Text.StringBuilder sb 
= new System.Text.StringBuilder();
    sb.Append(
"window.document.getElementById(’" + this.button_OK.ClientID + "’).disabled = true;");
    sb.Append(script);
    sb.Append(
";")
    
this.button_OK.Attributes.Add("onclick", sb.ToString());
}

 

GetPostBackEventReference会生成html代码:

<script type="text/javascript">
<!
var theForm = document.forms[’form1′];
if (!theForm) 
{
    theForm 
= document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value 
= eventTarget;
        theForm.__EVENTARGUMENT.value 
= eventArgument;
        theForm.submit();
    }
}
// –>
</script>

生成的script值为__doPostBack(’Button_OK’,'’)