適應性控制項行為的架構性概觀
更新:2007 年 11 月
本主題概要說明 ASP.NET 的適應性控制項行為架構。此架構可讓您延伸控制項呈現以適應許多不同類型的瀏覽器,包括行動裝置上的瀏覽器。
適應性控制項行為是為目標裝置自訂的控制項行為。ASP.NET 提供的適應性架構,允許攔截和以自訂行為替代控制項的主要生命週期階段。根據預設,ASP.NET Web 網頁架構將配接器 (Adapter) 的單一執行個體 (Instance) 對應至每個要求的每個控制項。在大部分情況下,這個預設對應十分具有彈性,足以滿足大部分開發人員的需要。在特定情況下,自訂配接器可以衍生並對應至控制項,以滿足指定裝置或裝置系列上控制項行為的其他需要。
適應性控制項行為的常見範例是適應性呈現 (Adaptive Rendering),其中呈現的 ASP.NET Web 網頁是瀏覽器或標記特定的。這對於撰寫支援使用不同標記語言之瀏覽器的應用程式特別有用。有數個方式可以在 ASP.NET 中控制 Web 網頁的適應性呈現,從指定應用程式的預設 XHTML 呈現,至提供自訂 ControlAdapter 物件。提供自訂 ControlAdapter 物件是進階工作,在大部分使用者案例中都不需要。
可以下列方式控制適應性呈現:
設定應用程式以呈現多個標記。
使用 XhtmlTextWriter 或 ChtmlTextWriter 類別以自訂控制項標記和屬性 (Attribute)。
建立自訂 TextWriter 類別以呈現輸出。
使用宣告式裝置標記或瀏覽器篩選,以影響如何根據裝置篩選定義設定控制項屬性。
提供自訂控制項配接器,以讓您以配接器生命週期方法替代控制項的預設生命週期方法。
除適應性呈現之外,可以根據目標裝置指定或改寫的其他控制項行為還包括下列內容:
處理回傳資料。
管理檢視狀態。
避免改寫自訂控制項。
ASP.NET Web 網頁和控制項呈現
預設呈現
在 ASP.NET Web 網頁的預設呈現中,會建立 HtmlTextWriter 類別的執行個體,並遞迴地呼叫 RenderControl 方法,方法是使用設為 HtmlTextWriter 類別之執行個體的參數。網頁控制項階層架構中的每個控制項都會將其標記附加至 HtmlTextWriter 物件的結尾。產生的 HtmlTextWriter 內容是在結果瀏覽器中呈現的內容。
當呈現 HTML 3.2 內容給用戶端時,ASP.NET 會自動使用 Html32TextWriter 類別。若要判斷使用的 TextWriter 物件型別,ASP.NET Web 網頁架構會查詢 Browser 物件的 TagWriter 屬性。
根據預設,當您使用支援 HTML 4.0 (含) 以後版本的瀏覽器時,ASP.NET Web 網頁和控制項會呈現符合 XHTML 1.0 Transitional 標準的標記。若要指定 ASP.NET 是否呈現符合 XHTML 標準的標記,請在 Web.config 檔中為應用程式設定 xhtmlConformance 項目 (ASP.NET 設定結構描述)。如需 ASP.NET 和 XHTML 的詳細資訊,請參閱 ASP.NET 和 XHTML。如需網頁生命週期的詳細資訊,請參閱 ASP.NET 網頁存留週期概觀。
使用自訂 TextWriter 物件
根據預設,ASP.NET 會將適當的 TextWriter 物件用於要求的裝置。當需要對 TextWriter 進行更大控制時,您可以使用繼承自 HtmlTextWriter 類別的現有類別,或建立自訂文字寫入器。
XhtmlTextWriter 和 ChtmlTextWriter 類別是 ASP.NET Web 網頁架構中的兩個類別,分別繼承自 HtmlTextWriter 和 Html32TextWriter 類別。XhtmlTextWriter 和 ChtmlTextWriter 類別提供其他適應性呈現功能。例如:
XhtmlTextWriter 類別在向行動裝置呈現 XHTML 標記時非常有用,它還提供一個方法,用於自訂呈現之 XHTML 項目的屬性。
ChtmlTextWriter 類別在向下列情形的裝置呈現 cHTML 或 Compact HTML 時非常有用:此類的裝置 (例如,行動電話觸控式鍵盤) 記憶體和 CPU 電源有限、顯示螢幕較小、格式化功能有限並且輸入選項的數目有限。
如果建立自訂文字寫入器,或想要指定特定文字寫入器以呈現特定裝置的輸出,則必須將文字寫入器對應至使用 controlAdapters 項目的 markupTextWriterType 屬性的裝置中,該屬性位於應用程式的 .browser 檔中。
裝置篩選
裝置篩選讓您以宣告方式自訂 Web 伺服器控制項屬性的輸出呈現方面。您可以將篩選套用至控制項屬性 (Property)、自訂屬性 (Attribute) 和樣板 (Template)。還可以對 @ Page 和 @ Control 指示詞的部分屬性使用裝置篩選。如果對一個屬性 (Property) 或屬性 (Attribute) 指定多個裝置篩選,則最特定的篩選會取得優先權。
- 用於篩選器輸出的裝置篩選器定義以瀏覽器型別的定義為基礎,如應用程式中所定義的那樣。預設瀏覽器定義檔案位於 %SystemRoot%\Microsoft.NET\Framework\versionNumber\CONFIG\Browsers 目錄。在應用程式之 App_Browsers 資料夾中指定的瀏覽器定義檔案與預設定義檔案合併。
如需裝置篩選的詳細資訊,請參閱 ASP.NET 裝置篩選概觀。如需 .browser 檔案格式的詳細資訊,請參閱瀏覽器定義檔結構描述 (browsers 項目)。
控制項配接器
概觀
為了自訂網頁或控制項的行為,ASP.NET 可讓您指定 ControlAdapter 物件,該物件會在控制項生命週期的關鍵時刻改寫或修改行為。在生命週期的每個階段,呼叫生命週期方法後,ASP.NET Web 網頁架構會進行檢查以查看是否有控制項的關聯配接器,並會呼叫配接器的關聯方法,而不是控制項的方法。在許多情況下,配接器方法可能還會重新順延至控制項的方法。這個行為的例外狀況 (Exception) 是狀態管理之配接器的適應性行為可附加至控制項的狀態。
下列情況下,您可能會想要以控制項配接器覆寫控制項的行為:
若要在控制項生命週期的特定階段期間,提定目標特定的處理。
例如,您可以使用 ControlAdapter 類別的 OnInit 方法,執行初始化工作,該工作是配接器附加的控制項和呈現控制項的目標裝置特定的。
若要自訂目標特定的呈現。
例如,您可以使用 Render 和 RenderChildren 方法產生目標特定的標記。
WebControlAdapter 和 PageAdapter 控制項
ControlAdapter 類別是定義所有配接器之基本功能的抽象類別 (Abstract Class),做為 WebControlAdapter 和 PageAdapter 類別的基底類別。
WebControlAdapter 類別是呈現適應性繼承自 WebControl 類別之控制項的起點。除 ControlAdapter 類別方法之外,WebControlAdapter 類別還會加入呈現標記特定的數個方法。
抽象 PageAdapter 類別是適應性呈現 Web 網頁的起點。
另外,PageAdapter 類別會定義屬性和方法,這些屬性和方法在一般網頁層級工作的內容中 (例如,快取或管理網頁狀態持續性 (Persistence)) 啟用適應性呈現。例如,除了依據與目標無關的參數快取網頁之外,您還可以依據目標瀏覽器的類型進行快取。在這個案例中,將覆寫 PageAdapter 類別的 CacheVaryByParams 屬性,以將其他 GET 或 POST 參數的清單傳回至控制項目標特定的快取。
與自訂文字寫入器相似,對於 ASP.NET Web 網頁架構將要辨識的自訂控制項配接器,自訂控制項配接器必須在應用程式之 .browser 檔的 controlAdapters 項目中定義。如需 .browser 檔案格式的詳細資訊,請參閱瀏覽器定義檔結構描述 (browsers 項目)。
建立配接器的設計模式包括下列方針:
繼承自 Control 類別的控制項應具有繼承自 ControlAdapter 類別的配接器。
繼承自 WebControl 類別的控制項應具有繼承自 WebControlAdapter 類別的配接器。
開發人員建立需要擴充配接器功能的自訂控制項時,應為其控制項建立基底類別配接器。
請參閱
概念
參考
xhtmlConformance 項目 (ASP.NET 設定結構描述)