ControlAdapter 類別

定義

為附加配置器的衍生控制項自訂呈現方式,以針對特定瀏覽器修改預設標記或行為,而且此類別為所有控制項配置器繼承來源的基底類別。

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 對應方法。

若要維護自己的狀態資訊,控制項配接器可以覆寫 SaveAdapterControlStateLoadAdapterControlStateSaveAdapterViewStateLoadAdapterViewState 方法。 SaveAdapterControlState當私用控制項和檢視狀態分別儲存和載入時,會呼叫 、 SaveAdapterViewState LoadAdapterControlStateLoadAdapterViewState

OnInitOnLoadOnPreRenderOnUnload 基底方法會回呼對應的 Control 類別方法。 因此,覆寫的任何方法 ControlAdapter 都必須呼叫其基底方法,否則不會引發與類別方法相關聯的 Control 事件。

控制項和配接器選擇性地實 IPostBackDataHandler 作 和 IPostBackEventHandler 介面。 .NET Framework會判斷配接器是否存在,以及配接器是否實作這些介面。 如果這樣做,配接器應該視需要覆寫 LoadPostDataRaisePostDataChangedEventRaisePostBackEvent 方法。 如果配接器中無法辨識回傳資料,則必須在控制項上呼叫回傳資料來處理它。 後續事件處理常式也必須在 控制項上回呼。

給實施者的注意事項

當您繼承自 ControlAdapter 類別時,需要一般配接器功能的控制項應該具有對應的配接器基類,例如 TextBoxAdapter 模式 ControlType Adapter () 。 配接器至少應該透過其 Control 屬性傳回控制項的強型別實例。

  1. 指定控制項類型和標記語言的控制項配接器應該以模式 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

取得對此頁的頁面配置器的參考 (關聯的控制項便存在於此頁面中)。

方法

BeginRender(HtmlTextWriter)

在呈現控制項之前呼叫。 在衍生的配置器類別中,產生特定目標所需的開頭標記 (而非 HTML 瀏覽器所需)。

CreateChildControls()

為複合控制項建立特定目標的子控制項。

EndRender(HtmlTextWriter)

在呈現控制項之後呼叫。 在衍生的配置器類別中,產生特定目標所需的結尾標記 (而非 HTML 瀏覽器所需)。

Equals(Object)

判斷指定的物件是否等於目前的物件。

(繼承來源 Object)
GetHashCode()

做為預設雜湊函式。

(繼承來源 Object)
GetType()

取得目前執行個體的 Type

(繼承來源 Object)
LoadAdapterControlState(Object)

載入之前在對頁面發出要求的期間由 SaveAdapterControlState() 所儲存的配置器控制項狀態資訊 (與此控制項配置器相關聯的控制項便存在於此頁面中)。

LoadAdapterViewState(Object)

載入之前在對頁面發出要求的期間由 SaveAdapterViewState() 所儲存的配置器檢視狀態資訊 (與此控制項配置器相關聯的控制項便存在於此頁面中)。

MemberwiseClone()

建立目前 Object 的淺層複製。

(繼承來源 Object)
OnInit(EventArgs)

為關聯控制項覆寫 OnInit(EventArgs) 方法。

OnLoad(EventArgs)

為關聯控制項覆寫 OnLoad(EventArgs) 方法。

OnPreRender(EventArgs)

為關聯控制項覆寫 OnPreRender(EventArgs) 方法。

OnUnload(EventArgs)

為關聯控制項覆寫 OnUnload(EventArgs) 方法。

Render(HtmlTextWriter)

為附加控制項配接器的控制項,產生目標特定的標記。

RenderChildren(HtmlTextWriter)

為複合控制項中的子控制項產生特定目標的標記 (控制項配置器會附加至此複合控制項)。

SaveAdapterControlState()

儲存控制項配置器的控制項狀態資訊。

SaveAdapterViewState()

儲存控制項配置器的檢視狀態資訊。

ToString()

傳回代表目前物件的字串。

(繼承來源 Object)

適用於

另請參閱