控制項產生器概觀
控制項產生器是一個類別,它是用來決定當伺服器控制項在 ASP.NET 網頁上是使用宣告式時的剖析方式。每一個 ASP.NET 控制項都和一個預設控制項產生器 (System.Web.UI.ControlBuilder) 關聯。在剖析網頁期間,預設控制項產生器會檢查控制項是否已標記上 ParseChildren(True) 屬性。如果已標記,則位於控制項開頭和結尾標記之間的巢狀項目必須對應至該控制項的屬性。任何其他的巢狀項目將產生一個剖析器錯誤。如需詳細的資訊,請參閱使用 ParseChildrenAttribute。當控制項未標記為 ParseChildren(True) 時,控制項產生器將建立子控制項並呼叫控制項上的 IParserAccessor.AddParsedSubObject。AddParsedSubObject 的預設實作會將子控制項加入至控制項的 Controls 集合。而巢狀控制項標記之間的常值文字將被剖析為 LiteralControl。
如果想為您的控制項提供其他 (自訂) 的剖析邏輯,您可以從 ControlBuilder 衍生並覆寫基底類別 (Base Class) 中的方法,來建立自己的控制項產生器。您必須將您的控制項標記上 System.Web.UI.ControlBuilderAttribute,如下列範例所示,使自訂控制項產生器和您的控制項建立關聯。
// Define a custom control builder.
public class MyControlBuilder : ControlBuilder {...}
// Associate it with your control by applying a
// ControlBuilder attribute.
[ControlBuilder(typeof(MyControlBuilder))]
public class MyControl : Control {...}
[Visual Basic]
' Define a custom control builder.
Public Class MyControlBuilder
Inherits ControlBuilder
...
End Class
' Associate it with your control by applying a
' ControlBuilder attribute.
<ControlBuilder(GetType(MyControlBuilder))> _
Public Class MyControl
Inherits Control
...
End Class
下列表格將列出一些 ControlBuilder 中的方法,即定義自訂控制項產生器時您可能會覆寫的方法。如需 ControlBuilder 成員的完整列表,請參閱 ControlBuilder。
ControlBuilder 中的方法 | 內容 |
---|---|
AllowWhiteSpaceLiterals | 指定是否在巢狀子控制項標記之間插入空白區 (White Space) 而以 LiteralControl 執行個體的形式加入至 Controls 集合。如需範例的資訊,請參閱自訂控制項產生器範例。 |
AppendSubBuilder | 加入子控制項的控制項產生器。 |
GetChildControlType | 依據子控制項的標記名稱傳回它的 Type。使用這個方法可以篩選出已加入至 Controls 集合的子控制項。如需範例的資訊,請參閱 ASP.NET 快速入門 -> ASP.NET Web Form -> 撰寫自訂的控制項。 |
如需控制項產生器的範例資訊,請參閱自訂控制項產生器範例。
注意 其他覆寫剖析邏輯的方法將會覆寫繼承自 Control 的 AddParsedSubObject 方法。您可以參考 ASP.NET 快速入門 -> ASP.NET Web Form -> 撰寫自訂的控制項 -> 覆寫控制項剖析中所提供的範例。請注意控制項產生器的剖析只可在編譯時間執行,而 AddParsedSubObject 方法則可在 Run Time 執行 (可能會有效能損耗的情形)。
請參閱
自訂控制項產生器範例 | 控制項剖析、ParseChildrenAttribute 和控制項產生器 | ControlBuilderAttribute