BlockUI 是一個相當不錯的jQuery插件,它可以輕易設定頁面指定區域顯示執行中文字(如 Loading...)並鎖定該區域限制輸入。簡單的說,若我們希望網頁在執行PostBack 或 Ajax 更新的過程中,希望能限制輸入或重覆按鈕並顯示處理中訊息的話,那 BlockUI 是相當不錯的選擇,接下來我們就來示範如何在 ASP.NET 中使用 BlockUI。

BlockUI 是 jQuery 的插入,所以要下載 jQuery 及 BlockUI 插入的 js 檔 (jquery.js 及 jquery.blockUI.js),相關檔案可由下列連結下載
jquery.js:http://jquery.com/
jquery.blockUI.js:http://malsup.com/jquery/block/ (該網站有 BlockUI 使用的詳細說明)

在 VS2005 新增一個 ASP.NET AJAX 網站專案,將 jquery.js 及 jquery.blockUI.js 檔案複製至網站 js 資料夾,並在頁面中的 head 區塊加入引用

   1:  <head runat="server">
   2:      <title>jQuery BlockUI Plugin</title>
   3:      <script src="js/jquery.js" type="text/javascript"></script>
   4:      <script src="js/jquery.blockUI.js" type="text/javascript"></script>
   5:  </head>
 
 
在頁面中加入 UpdatePanel 控制項,並在 UpdatePanel 中置入一個 Button,aspx 程式碼如下
 
   1:      <form id="form1" runat="server">
   2:          <asp:ScriptManager ID="ScriptManager1" runat="server" />
   3:      <div>
   4:          <asp:UpdatePanel ID="UpdatePanel1" runat="server">
   5:              <ContentTemplate>
   6:                  <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
   7:              </ContentTemplate>
   8:          </asp:UpdatePanel>
   9:      </div>
  10:      </form>

 

在 Button 的 Click 事件中撰寫等待 3 秒的程式碼,這是為了呈現 BlockUI 的效果。

   1:      Protected Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
   2:          Dim N1 As Integer
   3:          For N1 = 1 To 3
   4:              System.Threading.Thread.Sleep(1000)
   5:          Next
   6:      End Sub
 
 
使用 BlockUI 插件相當容易,只要頁面 submit 時呼叫 $.blockUI() 就會顯示 BlockUI,而頁面載入時呼叫 $.unblockUI() 隱藏 BlockUI。
所以在頁面 Page Load 事件中撰寫如下程式碼。
 
   1:      Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
   2:          Dim sScript As String
   3:   
   4:          '頁面執行 Submit 時顯示 blockUI
   5:          sScript = "$.blockUI();"
   6:          ScriptManager.RegisterOnSubmitStatement(Me, Me.GetType(), "blockUI", sScript)
   7:   
   8:          '頁面載入時隱藏 blockUI
   9:          sScript = "$.unblockUI();"
  10:          ScriptManager.RegisterStartupScript(Me, Me.GetType(), "unblockUI", sScript, True)
  11:      End Sub
 
執行結果如下,因為 $.blockUI() 未指定區域,所以會將整個頁面 Lock 並顯示 "Please wait..." 的訊息。當執行結束時,就會呼叫 $.unblockUI() 來隱藏 BlockUI。
 
image
 
若我們希望將顯示的文字改為「資料載入中...」並加入等待圖示的話,可以在 $.blockUI() 傳入 message 參數,程式碼修改如下
 
   1:          '頁面執行 Submit 時顯示 blockUI
   2:          sScript = "$.blockUI({" & _
   3:                    "message: '<h3></br><img src=""busy.gif"" /> 資料載入中...</h3>'" & _
   4:                    "});"
   5:          ScriptManager.RegisterOnSubmitStatement(Me, Me.GetType(), "blockUI", sScript)
 
 
執行結果如下
 
image
 
 

Feedback

  • laron 2008/11/28 上午 10:49 回覆

    # re: 在 ASP.NET 使用 jQuery BlockUI 插件

    不错,我正需要这篇文章,对我启发很大,谢谢了。

  • Loro 2008/12/2 下午 04:33 回覆

    # re: 在 ASP.NET 使用 jQuery BlockUI 插件

    那如果我在触发事件时向服务器发出请求.这时候调出 BlockUI遮罩页面, BlockUI的Message属性是一个Loading图标,当服务器回发时如何把回发的BlockUI的Message属性再换成返回的数据呢.这个不太清楚哦.

  • hector 2009/2/20 下午 01:22 回覆

    # re: 在 ASP.NET 使用 jQuery BlockUI 插件

    如何整合 ASP.NET Validation呢?

  • hatelove 2009/2/20 下午 05:18 回覆

    # re: 在 ASP.NET 使用 jQuery BlockUI 插件

    to hector,

    整合ASP.NET Validation? 以Jeff377老師這篇文章看來,

    他只是在postback或非同步更新時,去開關畫面的div。

    跟Validation沒有什麼關係唷,Validation驗證失敗時,應該連postback都不會postback,就被js擋下來了。

  • 文濱 2009/4/7 上午 10:29 回覆

    # re: 在 ASP.NET 使用 jQuery BlockUI 插件

    呵呵,
    這網站能找到很多實用的資源,
    真不錯~

    P.S:版主應該是我認識的那位Jeff吧?!

  • jeff 2009/4/8 下午 02:18 回覆

    # re: 在 ASP.NET 使用 jQuery BlockUI 插件

    to 文濱 :
    文濱是你本名嗎?若是的話,我就應該不認識你囉。

標題 *
名稱 *
Email (將不會被顯示)
Url
回應
登入後使用進階評論
Please add 8 and 1 and type the answer here: