ControlAdapter 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
為附加配置器的衍生控制項自訂呈現方式,以針對特定瀏覽器修改預設標記或行為,而且此類別為所有控制項配置器繼承來源的基底類別。
public ref class ControlAdapter abstract
public abstract class ControlAdapter
type ControlAdapter = class
Public MustInherit Class ControlAdapter
- 繼承
-
ControlAdapter
- 衍生
備註
控制配接器是覆寫其執行生命週期中特定 Control 類別方法和事件的元件,以允許瀏覽器或標記特定的處理。 .NET Framework會將單一 Control 衍生控制項配接器對應至每個用戶端要求的 物件。
配接器會修改特定瀏覽器或瀏覽器類別的控制項,或做為某些功能的任意篩選。 一般而言,配接器是由瀏覽器 (使用的標記語言所定義,例如 XHTML 或 HTML 3.2) 。 轉譯行為的大部分可調整性都可以封裝在衍生自 HtmlTextWriter 類別的特製化類別中。 因此,單一配接器可能可用於許多瀏覽器類別行為,或包含類別中的 HtmlTextWriter 可調整性,可能會使用不必要的控制項配接器。
控制項類別的配接器會套用至繼承自該類別的所有控制項,除非存在更特殊的配接器。 例如,類別的 BaseValidator 配接器可用於所有 Validator
物件。
配接器通常不會直接繼承自 類別,而是繼承自 ControlAdapter 其中一個目標特定配接器基類,這些基類提供控制項類型和目標瀏覽器的特定功能,或所需的特定轉譯。
控制項本身不一定需要配接器。 如果控制項是透過組合延伸,則子控制項配接器通常就已足夠。
每個控制項都有透過 .browser 定義檔案對配接器的明確對應。 因此,對 屬性的任何存取 Control.Adapter 都會使用 HttpBrowserCapabilities 從瀏覽器定義檔案擷取的物件,來執行配接器對應至控制項的查閱。
在處理期間,.NET Framework攔截可覆寫控制項方法的呼叫,這些方法可能為特定目標。 如果附加控制項配接器,.NET Framework會呼叫相關聯的配接器方法。
配接器會透過 方法執行控制項的 Render 轉譯。 如果覆寫,可能不應該呼叫基類實作, Render 因為該實作會在 方法上 Control.Render 執行回呼。 這可能會導致轉譯發生兩次,一次由配接器,一次由 控制項進行。
基 Render 底方法會回呼 Control.Render 控制項的 方法。 因此,如果您覆寫 Render ,則除非您實作的轉譯除了 控制項所提供的 Control.Render 之外,否則不應該呼叫基類實作。
您必須確定.NET Framework會針對子控制項的配接器執行攔截。 您可以呼叫 RenderChildren 基底方法,從覆 Render 寫呼叫 Control.RenderChildren 控制項的 方法。
和 BeginRender EndRender 方法會分別由控制項呼叫 (前後) 控制項呼叫 Render 方法。 如果轉譯前和後置轉譯是唯一需要瀏覽器特定的處理工作,則使用 BeginRender ,而且 EndRender 可能不需要覆寫 Render 。 和 EndRender 方法的預設行為 BeginRender 是呼叫 的 HtmlTextWriter 對應方法。
若要維護自己的狀態資訊,控制項配接器可以覆寫 SaveAdapterControlState 、 LoadAdapterControlState 、 SaveAdapterViewState 和 LoadAdapterViewState 方法。 SaveAdapterControlState當私用控制項和檢視狀態分別儲存和載入時,會呼叫 、 SaveAdapterViewState LoadAdapterControlState 和 LoadAdapterViewState 。
OnInit、 OnLoad 、 OnPreRender 和 OnUnload 基底方法會回呼對應的 Control 類別方法。 因此,覆寫的任何方法 ControlAdapter 都必須呼叫其基底方法,否則不會引發與類別方法相關聯的 Control 事件。
控制項和配接器選擇性地實 IPostBackDataHandler 作 和 IPostBackEventHandler 介面。 .NET Framework會判斷配接器是否存在,以及配接器是否實作這些介面。 如果這樣做,配接器應該視需要覆寫 LoadPostData 、 RaisePostDataChangedEvent 和 RaisePostBackEvent 方法。 如果配接器中無法辨識回傳資料,則必須在控制項上呼叫回傳資料來處理它。 後續事件處理常式也必須在 控制項上回呼。
給實施者的注意事項
當您繼承自 ControlAdapter 類別時,需要一般配接器功能的控制項應該具有對應的配接器基類,例如 TextBoxAdapter
模式 ControlType
Adapter
() 。 配接器至少應該透過其 Control 屬性傳回控制項的強型別實例。
- 指定控制項類型和標記語言的控制項配接器應該以模式
MarkupControlType
Adapter
命名 (,XhtmlTextBoxAdapter
例如,) 。 控制項的配接器應該在子名稱空間中Adapters
實作。
控制項配接器應該繼承自適當的基類,並遵循與控制項相同的繼承模型。 例如,繼承自基類之控制項的 Control 配接器應該繼承自 ControlAdapter 類別或相關 ControlType
Adapter
類別。
任何特製化介面卡都應該針對組態 .browser 檔案中所有裝置節點下的特製化控制項定義。
正確實作的控制項不應該假設配接器已附加,或附加的配接器會實作特定的介面。 相反地,它應該先檢查這些,再呼叫。
您可以在 控制項中模擬覆寫受保護的事件方法,例如 OnClick(EventArgs) 的 LinkButton 方法。 首先,使用 OnClick
方法建立配接器類別。 然後建立衍生自 LinkButton 的新控制項,並覆寫 OnClick(EventArgs) 方法。 覆寫 OnClick(EventArgs) 的方法會呼叫介面卡的 OnClick
方法。 配接器物件可透過 類別的 Control 受保護 Adapter 屬性取得。 Adapter控制項的 屬性是在 null
沒有相關聯的配接器時,因此任何程式碼都應該在呼叫配接器的方法之前檢查該條件。
建構函式
ControlAdapter() |
初始化 ControlAdapter 類別的新執行個體。 |
屬性
Browser |
取得對用戶端瀏覽器功能的參考 (此用戶端是發出目前 HTTP 要求的用戶端)。 |
Control |
取得控制項的參考 (指控制項配置器附加的控制項)。 |
Page |
取得對頁面的參考 (與此配置器相關聯的控制項便存在於此頁面中)。 |
PageAdapter |
取得對此頁的頁面配置器的參考 (關聯的控制項便存在於此頁面中)。 |