1. 程式人生 > >UpdatePanel控制元件,你真的會用了嗎?

UpdatePanel控制元件,你真的會用了嗎?

文/gxlxzys  出處/部落格園

    剛接觸這控制元件的時候,感覺這東西好神奇,把頁面中的東西放進去就能實現非同步重新整理,其它的什麼都不用做。我就這樣一直用了一段時間,最近才發現 UpdatePanel控制元件並不是個簡單的東東,我想肯定還有像我這樣把UpdatePanel放進去後就什麼都不管的人,希望我的貼對大家有些幫助。希 望各位多多支援,如有錯漏,請不吝指正。

    UpdatePanel控制元件(以下簡寫為up)有個屬性:UpdateMode 可取值 Always 和 Conditional ,預設是 Always ,總是進行自動更新,這對服務端是有效能損耗的,我們應儘量使用 Conditional 值,然後在服務端程式碼手動呼叫Update()方法來更新
這裡又要牽涉到另一個屬性: ChildrenAsTriggers 可選 true(預設) 和false,這個屬性的作用是:當up內的控制元件發生事件(如Click)時,是否自動更新此up的內容,如果選True,則更新,選False則不更 新,但可在事件程式碼中呼叫Update()方法手動更新,如Up1.Update();

  這種設定可用於有兩個或多個up的情況,比如up1中放的全是按鈕,像新增、刪除、修改等,up2中放的是gridView等內容顯示控制元件,up1中的按 鈕btn1呼叫up2.Update()方法更新up2,如果ChildrenAsTriggers設定為True,則up1也進行了更新,這是沒有必要 的,浪費伺服器資源,所以我們要將up1的ChildrenAsTriggers設為False,禁止自動更新。
其實將按鈕放在up1中,只是要讓這些按鈕變成非同步迴轉按鈕,如果你只有一個按鈕,單獨放在一個up中,顯然沒有必要,那該如何做呢?有兩個方法:
1、在頁面的page_load方法中註冊, 如:ScriptManager1.RegisterAsyncPostBackControl(btn1);要特別注意的是,不用放在if(!IsPostBack){}中,否則無效。
2、 使用up控制元件的Triggers屬性,如下圖所示,點新增按鈕右邊的小三角選擇AsyncPostBackTrigger,然後在ControlID中選 擇要進行非同步回傳的控制元件,EventName中選擇此按鈕中的哪個事件進行非同步回傳,圖中我選的是Click,這樣一來我將按鈕放在up外面,點選一樣能 進行非同步更新。這樣設定後就不需要手動呼叫Update()方法了,方法1是需要的。


你 會發現小三角下有兩個選項,那第二個是用來做什麼的呢?PostBack,當然是頁面回傳了,如果把上一步中的按鈕設為PostBack,那點按鈕就不會 是區域性更新,而是整頁回送了。這個其實也是很有用的,很多人都知道up的非同步更新不支援FielUpload控制元件,我那時候做程式是把 FileUpload放在up外的,可是這樣會影響頁面整體佈局,現在終於知道怎麼做了。我還是截張圖吧:
我把FileUpload放在up中,點上傳按鈕就能上傳圖片了


一般情況下,我們應將用於顯示資料的東西才放到up中,如gridview等。並且儘量使用手動更新模式,這樣才能讓程式執行起來順暢而高效,當然了,如果頁面很簡單的話就沒並要搞這麼複雜,全部預設就行了。今天就到這,歡迎指正批評。
我也是看了《ASP.NET AjAX經典範例168(附光碟V
C#
版)章立民》這本書才知道這些的,這書非常不錯,建議大家買一本。