2.4 UpdateMode與UpdateTriggers
UpdateMode
不知讀者們是否已經查覺,前文在談論UpdatePanel控件的刷新時,特別注明當UpdatePanel控件中的子控件觸發Async-Postback動作時,刷新的區域是“涵蓋網頁上的所有將UpdateMode設為Always的UpdatePanel控件”,而不是單單只有觸發Async-Postback的那個UpdatePanel控件。這意味著當Async-Postback動作發生時,ASP.NET AJAX會更新所有UpdateMode設為Always的UpdatePanel控件內容,可以想見,當頁面上有很多個UpdatePanel控件時,對效率會產生多大的影響!解決辦法是將UpdatePanel控件的UpdateMode屬性設為Conditional,交由Triggers或程序來控制該UpdatePanel控件的刷新。
UpdateTrigger
當UpdateMode設為Conditional后,UpdateTriggers屬性的設定就顯得更加重要,只有UpdateTriggers中所設定的控件發生Async-Postback動作時,此UpdatePanel控件才會刷新。默認情況下,UpdatePanel控件的ChildrenAsTriggers屬性值設為True,意味著位于此UpdatePanel控件中的子控件會自動成為UpdateTriggers的一部分,也就是說只要這些子控件發生Postback動作,這個Postback動作將變成Async-Postback動作,完成后就會刷新此UpdatePanel中的內容。適當地利用UpdateMode及UpdateTriggers,可以對UpdatePanel控件的刷新做更細致的調整和更有效率的應用,請開啟第2、3節中所創建的網站,并照下列步驟操作,如圖2-17所示。

圖2-17
1. 新建一個網頁。
2. 于網頁中放入ScriptManager控件。
3. 放入UpdatePanel控件,ID設定為UpdatePanel1。
4. 將UpdatePanel1的UpdateMode屬性設為Conditional。
5. 放一個SqlDataSource控件至UpdatePanel1,ID設為SqlDataSource1,鏈接至Northwind數據庫中的Customers數據表,并配置成可編輯的DataSource。
6. 放一個GridView控件至UpdatePanel1中,將DataSourceID設為SqlDataSource1,勾選“Enable Paging”及“Enable Editing”選項。
7. 加一個Button控件于UpdatePanel1控件外面,名為Button1,在其Click事件中鍵入程序2-5的程序代碼。
程序2-5
Samples\2\SecondAjax\UseTriggers.aspx.cs protected void Button1_Click(object sender, EventArgs e) { GridView1.EditIndex = 4; GridView1.DataBind(); }
在UpdatePanel默認的行為中,這個Button控件并非位于任何UpdatePanel控件內,因此其Postback動作將會導致整個網頁的刷新,但若借助于UpdatePanel控件所提供的Trigger功能,便可將其設定為觸發Postback后,要求特定的UpdatePanel控件進行刷新動作。請點擊UpdatePanel控件的Triggers屬性,點擊“Add”按鈕新增一個Trigger,將ControlID屬性設為Button1,EventName屬性則設為Click,如圖2-18所示。

圖2-18
這個Trigger設定的意思是,當Button1按鈕發生Postback時,這個Postback動作將被視為Async-Postback動作,當此動作送至Server后,UpdatePanel控件會判斷送出此Async-Postback動作的控件是否在Triggers設定中,再判斷事件名稱是否符合,兩者皆符合時,此UpdatePanel控件便會進行刷新動作,當某個Trigger未設定事件名稱時,意味著不管該控件發生任何Postback動作,都會觸發UpdatePanel的刷新。請將此網頁設為Start Page(起始網頁)后運行此程序,如圖2-19所示。
點擊Button按鈕后,你便會察覺到網頁只會刷新位于UpdatePanel控件中的GridView控件的狀態而已,也就是GridView控件會進入編輯第四行的狀態。請特別注意!這個Button并未放在UpdatePanel控件中,這也就是說即使于Click事件中修改其Text屬性值,也不會在點擊按鈕后立即顯示所修改的值,不過由于UpdatePanel控件的行為模式,這個修改值的動作其實已經完成,只要下次有頁面刷新情況發生時,還是會看到這個修改后的值。

圖2-19
- 基于LabWindows/CVI的虛擬儀器設計與應用
- 圖解PLC控制系統梯形圖和語句表
- Associations and Correlations
- 網絡組建與互聯
- 傳感器與新聞
- LMMS:A Complete Guide to Dance Music Production Beginner's Guide
- Bayesian Analysis with Python
- 基于ARM9的小型機器人制作
- EJB JPA數據庫持久層開發實踐詳解
- 計算機硬件技術基礎學習指導與練習
- PostgreSQL 10 High Performance
- 大數據時代的調查師
- 智能小車機器人制作大全(第2版)
- 基于Quartus Ⅱ的數字系統Verilog HDL設計實例詳解
- 系統安裝、維護與數據備份技巧