說明:對Atlas系列文章的翻譯將以先前制定的翻譯順序進行,為了保持原文的味道,翻譯過程中盡量保證不做刪節。為了保證可讀性和連貫性,文中對一些詞彙的翻譯作了英文注釋,由於能力有限,在翻譯和學習過程中可能有疏漏和不當之處,還望大家多多指點。總體來說這部分翻譯的文章只是一個介紹和概括性的,更詳細的部分請參考請他園子裡講解atlas的文章。
原文地址:這裡
翻譯:範維肖
UpdatePanel Class
作用:將一個頁面分成多個地區,每個地區都可以在不重新重新整理整個頁面的前提下更新其內容(局部回傳)
文法:Public Class UpdatePanel:Control
備忘:
當頁面的一部分在回傳後需要改變時,通常整個頁面都需要重新整理,UpdatePanel解決了這個問題,通過UpdatePanel我們可以使用部分更新(patial update)通過更多的頻繁多回傳來減少螢幕的閃爍(整個頁面重新整理時會造成screen flicker),同時可以使得您建立更具有互動能力的web應用程式。
當您在開發一個asp.net頁時使用部分更新(partial rendering)時,這個頁面看起來和普通的沒有什麼區別。不同之處在於這個頁面裡包含了一個ScriptManager控制項,它用作管理部分更新。這使得頁面上的各個UpdatePanel可以獨立工作,互不影響。當然,您也可以把UpdatePanel控制項放到User Control裡或者Master裡去用。
當使用部分更新(partial-rendering)時,控制項能執行原始的整頁回傳(regular postback)或使用單獨的UpdatePanel的非同步回傳(asynchronous poskback),如果允許非同步回傳,將控制項放如UpdatePanel裡就能使用這個功能了。所有在UpdatePanel以外的控制項都將導致整頁回傳,但是這裡有幾個例外情況:
1. 像TimerControl這樣的沒有使用者介面的組件。
2. 註冊到ScriptManager.RegisterAsyncPostBackControl方法的控制項
3. 被串連到UpdatePanel的觸發器(triggers)的控制項
這三種情況下的控制項始終進行部分回傳。
為了使得頁面的某些部分可以更新,您需要把ScriptManager控制項加入到您的頁面並且設定它的partialRedering屬性為true。然後使用UpdatePanel控制項把頁面分成可以獨立更新的地區,同時指定一個引起這些地區重新整理的觸發條件。更新地區的內容可以在UpdatePanel中的ContentTemplate裡描述。
當頁面第一次被載入(render)時,UpdatePanel控制項的內容被渲染並且發送到用戶端。當回傳被觸發時,每個UpdatePanel的Mode屬性指明了這個UpdatePanel是總是被回傳還是在觸發器控制下回傳。當Mode被設定為Always的時候,這個UpdatePanel將會在任何一次回傳觸發時回傳,當Mode被設定為Conditional的時候,這個UpdatePanel只會在下面的情況發生時回傳:
1. 當串連到這個UpdatePanel的觸發器(trigger)觸發時
2. 當您強制調用Update方法時
Triggers集合的內容指定了可以引起UpdatePanel回傳的事件。您可以使用ControlValueTrigger對象使得當一個控制項的值改變時回傳,同時您還可以使用ControlEventTrigger對象使得當一個控制項的特定事件被觸發時引起回傳。
RenderMode屬性有兩個值,分別為Inline和Block,他們會分別將這個UpdatePanel渲染成<span>和<div>標記。
IsUpdating屬性是唯讀,bool類型,用來判斷UpdatePanel是否作為非同步回傳的一部分正在更新。它為true的條件是:
1.在部分回傳模式下當前請求正在被執行
2.當一個用戶端觸發器被觸發
3.Update方法被執行
在伺服器端,非同步回傳所引起的頁面生命週期時間和普通的回傳是一樣的,只不過UpdatePanel裡的內容需要被更新而被送到了瀏覽器而已。
注意:
1.不能把檔案上傳控制項放入UpdatePanel裡,因為資料的傳輸與部分頁面更新相衝突。
2.ContentTemplate被定義為一個單一實例模板(single instance template)
UpdatePanel的聲明文法:
1 <atlas:UpdatePanel
2 ID="string"
3 Mode="Always|Conditional"
4 RenderMode="Block|Inline"
5 runat="server"
6 >
7 <ContentTemplate>
8 <!-- UpdatePanel content -->
9 </ContentTemplate>
10 <Triggers>
11 <ControlValueTrigger
12 ControlID="string"
13 PropertyName="string"
14 />
15 <ControlEventTrigger
16 ControlID="string"
17 EventName="string"
18 />
19 </Triggers>
20 </atlas:UpdatePanel>
附加:UpdatePanel如果放入User Control或MasterPage裡的話,一定要注意ScriptManager的問題。此外,UpdatePanel的嵌套問題要注意Mode的設定和在讀取IsUpdating屬性時的取值問題。