摘要:UpdatePanel+驗證功能(Validate)+頁面遮罩(jQuery BlockUI Plugin)
本次範例主題
當頁面使用UpdatePanel和驗證功能情況下,如何使在驗證成功後Postback時,能有全頁面遮罩遮住頁面,避免使用者重複按下送出動作(Submit)。
下面為程式碼與註解
範例為:
當使用者按下Button1控件時,便會先觸發blockUIAndValid function 進行驗證與(如果驗證通過)開啟頁面遮罩,
至到PostBack完後會自動執行closeBlockUI function來關閉頁面遮罩。
相關參考:
jQuery: http://jquery.com/
jQuery BlockUI Plugin: http://malsup.com/jquery/block/
Default.aspx 檔案內容:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script src="Scripts/jquery-2.1.1.min.js"></script>//必須載入jQuery
    <script src="Scripts/jquery.blockUI.min.js"></script>//必須載入jQuery BlockUI Plugin
    <title></title>
</head>
<body>
    <script>
        //驗證通過時,開啟 Block UI 遮罩
        function blockUIAndValid() {
            var result = false;
            if (typeof(Page_ClientValidate) == "function") {
                result = Page_ClientValidate();//執行驗證。true, 驗證通過; false, 驗證失敗
                if (result === true) {
                    $.blockUI({ message: '<div>Server 處理中...(全頁遮罩)</div>' });//開啟 Block UI 遮罩
                }
                //由於 Page_ClientValidate 驗證失敗時,Page_BlockSubmit變數會為true,造成下次觸發PostBack無效,只有在下下次觸發PostBack才有效果,因此手動呼叫Page_ClientValidate function時,必須手動將Page_BlockSubmit變數賦值false。
                Page_BlockSubmit = false;
            }
            return result;
        }
    </script>
    <script>
        function closeBlockUI(sender, args) {
            $.unblockUI(); //關閉 Block UI 遮罩
        }
        
        $(document).ready(function(){
         //在每次UpdatePanel完,執行closeBlockUI function(關閉 Block UI 遮罩)
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(closeBlockUI);
        });
    </script>
    <form id="form1" runat="server">
    <div>   
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" Display="Dynamic" ErrorMessage="驗證失敗:不可空白" ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
                <br />                
                <asp:Button ID="Button1" runat="server" Text="Go PostBack" OnClick="Button1_Click" OnClientClick="return blockUIAndValid();"/>
            </ContentTemplate>
        </asp:UpdatePanel>
    
    </div>
    </form>
</body>
</html>
Default.aspx.cs 檔案內容:
    //Button1按鈕Click觸發事件
    protected void Button1_Click(object sender, EventArgs e)
    {
        System.Threading.Thread.Sleep(2000);//模擬處理事情(停2秒)
    }
執行結果
※在此感謝所有的幫助者,感謝~