关于防止页面重复提交的方法,前面的文章都有提到,可以参考:
- 利用模态DIV结合UpdateProgress防止页面重复提交
- ASP.NET中在点击按钮后将该按钮设为不可用的若干情况
- atlas客户端页面周期事件及实践:客户端验证
本文介绍利用atlas页面周期事件来实现该功能的方法,其实原理很简单,就是在提交之前在beginRequest事件中将按钮设为不可用,然后在endRequest事件中将按钮状态恢复。请看下面的例子
<form id="form1" runat="server">
<asp:ScriptManager ID="sm1" runat="server">
</asp:ScriptManager>
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(SetButtonStatus);
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(SetButtonStatusEnd);
var postButton ;
function SetButtonStatus(sender,args)
{
postButton =args.get_postBackElement();
if (postButton.id=='btnPostBack')
{
postButton.disabled='disabled';
}
}
function SetButtonStatusEnd(sender,args)
{
if (postButton.id=='btnPostBack')
{
postButton.disabled='';
}
}
</script>
<asp:UpdatePanel ID="up1" runat="server" UpdateMode="conditional">
<ContentTemplate>
<%=DateTime.Now.ToString() %>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnPostBack" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<asp:Button ID="btnPostBack" runat="server" Text="LogIn" OnClick="btnPostBack_Click" />
</form>
[code=c#]protected void btnPostBack_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(2000);
}[/code]
注意,该按钮必须提交了一个异步回发请求该方法才会有效。
参考:
- beginRequest
- BeginRequestEventArgs
- endRequest
- EndRequestEventArgs