摘要: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秒)
}
執行結果
※在此感謝所有的幫助者,感謝~