次の方法で共有


コントロール ビルダの概要

コントロール ビルダは、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