開發自訂控制項:重要概念
這個主題提供各種程式設計項目 (與 ASP.NET 伺服器控制項的開發有關) 的高階概觀。這裡的討論旨在做為一般程式設計的準則;詳細資訊在本章節別處另有交代。您可以用任何符合通用語言規格 (Common Language Specification) 的程式語言 (如什麼是通用語言規格? 中所說明的) 來撰寫您的控制項。
ASP.NET 伺服器控制項為直接或間接衍生自 System.Web.UI.Control 的類別。下列兩個類別是 ASP.NET 伺服器控制項的基底類別 (Base Class)。
-
Control 類別定義通用於所有 ASP.NET 伺服器控制項的屬性、方法和事件。這些包括方法和事件,支配控制項執行的存留週期和屬性,例如 ID、UniqueID、Parent、ViewState 和 Controls (子控制項的集合)。Control 沒有任何使用者介面 (UI) 特定功能。如果您正在撰寫不提供 UI 的控制項,或組合會產生它們自己 UI 的其他控制項,請從 Control 來衍生。
System.Web.UI.WebControls.WebControl
WebControl 類別衍生自 Control ,並且提供 UI 功能的額外屬性和方法。這些屬性包括 ForeColor、BackColor、Font、BorderStyle、Height 和 Width。WebControl 為 ASP.NET 中 Web 伺服器控制項家族的基底類別。如果您的控制項要呈現 UI,請從 WebControl 來衍生。
依照您控制項的功能,您可能必須實作下列介面的其中一個或多個。
System.Web.UI.INamingContainer
INamingContainer 為資料標記 (空白) 介面,沒有任何方法。當這個介面為控制項所實作時,ASP.NET 網頁架構在控制項之下建立新的命名範圍 (Scope)。這確保子控制項在控制項的階層式樹狀結構中會擁有唯一 ID。如果您的控制項為提供資料繫結 (Data Binding) 的複合控制項 (Composite Control) (它含有子控制項)、如果它是樣板化的控制項,或如果它需要轉送事件至其子控制項,它必須實作 INamingContainer 介面。以 Repeater 控制項和其他資料繫結控制項為例。如需詳細資訊,請參閱開發複合控制項。
System.Web.UI.IPostBackDataHandler
如果您的控制項需要檢查回傳資料並更新其狀態,或根據資料的變更在伺服器上引發事件,它必須實作 IPostBackDataHandler 介面。以 TextBox 控制項為例,它會檢查張貼的文字值並更新其 Text 屬性,而且在文字變更時引發 TextChanged 事件。如需詳細資訊,請參閱處理回傳資料。
System.Web.UI.IPostBackEventHandler
如果您的控制項擷取用戶端回傳事件,並藉著處理它或於伺服器引發事件來回應它的話,控制項必須實作 IPostBackEventHandler 介面。以 Button 控制項為例,它會擷取表單的送出,並在伺服器引發 Click 事件。如需詳細資訊,請參閱擷取回傳事件。
您可以覆寫繼承自基底類別的屬性、方法和事件,而且也可以加入新的屬性、方法和事件至您的自訂控制項。如需詳細資訊,請參閱ASP.NET 伺服器控制項中的屬性、ASP.NET 伺服器控制項中的方法和 ASP.NET 伺服器控制項中的事件。
ASP.NET 允許控制項存取並公開樣式,如伺服器控制項中的樣式所述。您可以撰寫 ASP.NET 伺服器控制項,以允許網頁開發人員透過內嵌 (Inline) 樣板語法自訂控制項的使用者介面。如需詳細資訊,請參閱開發樣板化的控制項。
若要開發資料繫結控制項 (具有繫結至資料的複雜屬性),請參閱開發樣板化的資料繫結控制項。
若要逐步瞭解建立簡單自訂控制項的步驟,請參閱開發簡單 ASP.NET 伺服器控制項。