官术网_书友最值得收藏!

  • 決戰.NET
  • 黃忠成
  • 1016字
  • 2018-12-27 16:55:54

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所示。

true

圖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所示。

true

圖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控件的行為模式,這個修改值的動作其實已經完成,只要下次有頁面刷新情況發生時,還是會看到這個修改后的值。

true

圖2-19

主站蜘蛛池模板: 墨江| 清远市| 永胜县| 萨迦县| 云梦县| 锦州市| 额敏县| 普安县| 菏泽市| 灵石县| 钟山县| 平谷区| 潜江市| 讷河市| 云阳县| 镇安县| 焦作市| 延安市| 娄烦县| 桐庐县| 江华| 佛山市| 遵义县| 平湖市| 临清市| 怀化市| 荥经县| 古浪县| 天津市| 宁陕县| 建昌县| 屯门区| 千阳县| 馆陶县| 万年县| 平远县| 新田县| 始兴县| 博爱县| 黄山市| 江山市|