atlas客户端页面周期事件及实践:防止重复提交

原文:刘武|atlas客户端页面周期事件及实践:防止重复提交  

关于防止页面重复提交的方法,前面的文章都有提到,可以参考:

  1. 利用模态DIV结合UpdateProgress防止页面重复提交
  2. ASP.NET中在点击按钮后将该按钮设为不可用的若干情况
  3. 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>

protected void btnPostBack_Click(object sender, EventArgs e)
{
    System.Threading.Thread.Sleep(2000);        }

注意,该按钮必须提交了一个异步回发请求该方法才会有效。

参考:

  1. beginRequest 
  2. BeginRequestEventArgs 
  3. endRequest 
  4. EndRequestEventArgs

你可能感兴趣的:(重复提交)