一开始我使用了
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’,'’)