コントロール ビルダの概要
コントロール ビルダは、ASP.NET ページで、宣言によってサーバー コントロールを使用する場合に、サーバー コントロールを解析する方法を制御するクラスです。すべての ASP.NET コントロールは、既定のコントロール ビルダ (System.Web.UI.ControlBuilder) に関連付けられています。ページ解析の間に、既定のコントロール ビルダは、コントロールが ParseChildren(true) 属性に設定されているかどうかをチェックします。設定されている場合、コントロールの開始タグと終了タグ内の入れ子になった要素は、コントロールのプロパティに対応する必要があります。コントロールのプロパティに対応していない入れ子になった要素は、パーサー エラーを生成します。詳細については、「ParseChildrenAttribute の使用方法」を参照してください。コントロールが ParseChildren(true) に設定されていない場合、コントロール ビルダは、子コントロールを作成し、コントロールの IParserAccessor.AddParsedSubObject を呼び出します。AddParsedSubObject の既定の実装によって、子コントロールがコントロールの Controls コレクションに追加されます。入れ子になったコントロール タグ間のリテラル テキストは、LiteralControl として解析されます。
コントロールにその他の (カスタム) 解析ロジックを適用する場合は、ControlBuilder から派生させて、基本クラスのメソッドをオーバーライドすることによって、独自のコントロール ビルダを作成できます。次の例に示すように、コントロールを 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 | 入れ子になった子コントロール タグ間にある空白を LiteralControl インスタンスとして Controls コレクションに追加するかどうかを指定します。サンプルについては、「カスタム コントロール ビルダのサンプル」を参照してください。 |
AppendSubBuilder | 子コントロールにコントロール ビルダを追加します。 |
GetChildControlType | タグ名に基づいて、子コントロールの Type を返します。このメソッドは、Controls コレクションに追加される子コントロールにフィルタ処理するために使用します。サンプルについては、ASP.NET クイック スタートで、「NET サンプル - ASP.NET コントロールの作成」を参照してください。 |
コントロール ビルダのサンプルについては、「カスタム コントロール ビルダのサンプル」を参照してください。
メモ Control から継承した AddParsedSubObject メソッドをオーバーライドしても解析ロジックをオーバーライドできます。例については、ASP.NET クイック スタート で、「NET サンプル - ASP.NET コントロールの作成」のサンプル名をクリックして、各サンプルを参照してください。AddParsedSubObject メソッドが実行時に実行される (パフォーマンスに影響を与える) のに対して、コントロール ビルダによる解析はコンパイル時に行われます。
参照
カスタム コントロール ビルダのサンプル | コントロール解析、ParseChildrenAttribute、およびコントロール ビルダ | ControlBuilderAttribute