TemplateContainerAttribute クラス
アセンブリ: System.Web (system.web.dll 内)
![構文](http://weblio.hs.llnwd.net/e7/img/dict/msdnc/minus.gif)
<AttributeUsageAttribute(AttributeTargets.Property)> _ Public NotInheritable Class TemplateContainerAttribute Inherits Attribute
[AttributeUsageAttribute(AttributeTargets.Property)] public sealed class TemplateContainerAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Property)] public ref class TemplateContainerAttribute sealed : public Attribute
![解説](http://weblio.hs.llnwd.net/e7/img/dict/msdnc/minus.gif)
パーサーは、TemplateContainerAttribute オブジェクトのパラメータとして渡される Type オブジェクトを、データ バインディング式で使用される Container オブジェクトの型として使用します。ITemplate インターフェイスを返し、TemplateContainerAttribute でマークされるプロパティを持つコントロールは、INamingContainer インターフェイスを実装する必要があります。
属性の使用方法については、「属性を使用したメタデータの拡張」を参照してください。
![使用例](http://weblio.hs.llnwd.net/e7/img/dict/msdnc/minus.gif)
TemplatedFirstControl という名前の template 宣言されたコントロールを作成し、このコントロールを FirstTemplateContainer という名前のコンテナと関連付ける方法を次のコード例に示します。このコード例では、テンプレートが指定されない場合はサーバー時間を表示し、テンプレートが指定される場合はテンプレートの内容を表示するカスタム コントロールが作成されます。
' File name:templatecontainerattribute.vb. Imports System Imports System.Web Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.Collections Namespace Samples.AspNet.VB.Controls <ParseChildren(True)> _ Public Class VB_TemplatedFirstControl Inherits Control Implements INamingContainer Private _firstTemplate As ITemplate Private [_text] As [String] = Nothing Private _myTemplateContainer As Control <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _ Protected Overrides Sub OnDataBinding(ByVal e As EventArgs) EnsureChildControls() MyBase.OnDataBinding(e) End Sub Public Property FirstTemplate() As ITemplate Get Return _firstTemplate End Get Set(ByVal value As ITemplate) _firstTemplate = Value End Set End Property Public Property [Text]() As [String] Get Return [_text] End Get Set(ByVal value As [String]) [_text] = Value End Set End Property Public ReadOnly Property DateTime() As [String] Get Return System.DateTime.Now.ToLongTimeString() End Get End Property Public ReadOnly Property MyTemplateContainer() As Control Get Return _myTemplateContainer End Get End Property <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _ Protected Overrides Sub CreateChildControls() If Not (FirstTemplate Is Nothing) Then _myTemplateContainer = New VB_FirstTemplateContainer(Me) FirstTemplate.InstantiateIn(_myTemplateContainer) Controls.Add(_myTemplateContainer) Else Controls.Add(New LiteralControl([Text] + " " + DateTime)) End If End Sub 'CreateChildControls End Class 'VB_TemplatedFirstControl Public Class VB_FirstTemplateContainer Inherits Control Implements INamingContainer Private _parent As VB_TemplatedFirstControl Public Sub New(ByVal parent As VB_TemplatedFirstControl) Me._parent = parent End Sub 'New Public ReadOnly Property [Text]() As [String] Get Return _parent.Text End Get End Property Public ReadOnly Property DateTime() As [String] Get Return _parent.DateTime End Get End Property End Class 'VB_FirstTemplateContainer End Namespace 'CustomControls
using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Collections; namespace Samples.AspNet.CS.Controls { [ParseChildren(true)] public class TemplatedFirstControl : Control, INamingContainer { private ITemplate firstTemplate; private String text = null; private Control myTemplateContainer; [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")] protected override void OnDataBinding(EventArgs e) { EnsureChildControls(); base.OnDataBinding(e); } [TemplateContainer(typeof(FirstTemplateContainer))] public ITemplate FirstTemplate { get { return firstTemplate; } set { firstTemplate = value; } } public String Text { get { return text; } set { text = value; } } public String DateTime { get { return System.DateTime.Now.ToLongTimeString(); } } public Control MyTemplateContainer { get { return myTemplateContainer; } } [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")] protected override void CreateChildControls() { if (FirstTemplate != null) { myTemplateContainer = new FirstTemplateContainer(this); FirstTemplate.InstantiateIn(myTemplateContainer); Controls.Add(myTemplateContainer); } else { Controls.Add(new LiteralControl(Text + " " + DateTime)); } } } public class FirstTemplateContainer : Control, INamingContainer { private TemplatedFirstControl parent; public FirstTemplateContainer(TemplatedFirstControl parent) { this.parent = parent; } public String Text { get { return parent.Text; } } public String DateTime { get { return parent.DateTime; } } } }
package Samples.AspNet.CS.Controls; /* File name:templatecontainerattribute.jsl. */ import System.*; import System.Web.*; import System.Web.UI.*; import System.Web.UI.WebControls.*; import System.Collections.*; /** @attribute ParseChildren(true) */ public class TemplatedFirstControl extends Control implements INamingContainer { private ITemplate firstTemplate; private String text = null; private Control myTemplateContainer; protected void OnDataBinding(EventArgs e) { EnsureChildControls(); super.OnDataBinding(e); } //OnDataBinding /** @attribute TemplateContainer(FirstTemplateContainer.class) */ /** @property */ public ITemplate get_FirstTemplate() { return firstTemplate; } //get_FirstTemplate /** @property */ public void set_FirstTemplate(ITemplate value) { firstTemplate = value; } //set_FirstTemplate /** @property */ public String get_Text() { return text; } //get_Text /** @property */ public void set_Text(String value) { text = value; } //set_Text /** @property */ public String get_DateTime() { return System.DateTime.get_Now().ToLongTimeString(); } //get_DateTime /** @property */ public Control get_MyTemplateContainer() { return myTemplateContainer; } //get_MyTemplateContainer protected void CreateChildControls() { if (get_FirstTemplate() != null) { myTemplateContainer = new FirstTemplateContainer(this); get_FirstTemplate().InstantiateIn(myTemplateContainer); get_Controls().Add(myTemplateContainer); } else { get_Controls().Add(new LiteralControl(get_Text() + " " + DateTime.class)); } } //CreateChildControls } //TemplatedFirstControl public class FirstTemplateContainer extends Control implements INamingContainer { private TemplatedFirstControl parent; public FirstTemplateContainer(TemplatedFirstControl parent) { this.parent = parent; } //FirstTemplateContainer /** @property */ public String get_Text() { return parent.get_Text(); } //get_Text /** @property */ public String get_DateTime() { return parent.get_DateTime(); } //get_DateTime } //FirstTemplateContainer
次の Web フォームでは、前述のコード例で作成されたカスタム コントロールの使用方法を示しています。TemplatedFirstControl の 2 つのインスタンスがページ上に配置されます。
<%@ Page Language="VB" %> <%@ Import Namespace="System.Reflection" %> <%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.VB.Controls" Assembly="Samples.AspNet.VB.Controls" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) ' Get the class type for which to access metadata. Dim clsType As Type = GetType(VB_TemplatedFirstControl) ' Get the PropertyInfo object for FirstTemplate. Dim pInfo As PropertyInfo = clsType.GetProperty("FirstTemplate") ' See if the TemplateContainer attribute is defined for this property. Dim isDef As Boolean = Attribute.IsDefined(pInfo, GetType(TemplateContainerAttribute)) ' Display the result if the attribute exists. If isDef Then Dim tca As TemplateContainerAttribute = CType(Attribute.GetCustomAttribute(pInfo, GetType(TemplateContainerAttribute)), TemplateContainerAttribute) Response.Write("The binding direction is: " & tca.BindingDirection.ToString()) End If End Sub </script> <html > <head runat="server"> <title>TemplateContainerAttribute Example</title> </head> <body> <form id="form1" runat="server"> <div> <aspSample:VB_TemplatedFirstControl id="TemplatedFirstControl1" runat="server"> <FirstTemplate>This is the first template.</FirstTemplate> </aspSample:VB_TemplatedFirstControl> <br /> <aspSample:VB_TemplatedFirstControl id="TemplatedFirstControl2" runat="server"> </aspSample:VB_TemplatedFirstControl> </div> </form> </body> </html>
<%@ Page Language="C#" %> <%@ Import Namespace="System.Reflection" %> <%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS.Controls" Assembly="Samples.AspNet.CS.Controls" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> protected void Page_Load(object sender, EventArgs e) { // Get the class type for which to access metadata. Type clsType = typeof(TemplatedFirstControl); // Get the PropertyInfo object for FirstTemplate. PropertyInfo pInfo = clsType.GetProperty("FirstTemplate"); // See if the TemplateContainer attribute is defined for this property. bool isDef = Attribute.IsDefined(pInfo, typeof(TemplateContainerAttribute)); // Display the result if the attribute exists. if (isDef) { TemplateContainerAttribute tca = (TemplateContainerAttribute)Attribute.GetCustomAttribute(pInfo, typeof(TemplateContainerAttribute)); Response.Write("The binding direction is: " + tca.BindingDirection.ToString()); } } </script> <html > <head runat="server"> <title>TemplateContainerAttribute Example</title> </head> <body> <form id="form1" runat="server"> <div> <aspSample:TemplatedFirstControl id="TemplatedFirstControl1" runat="server"> <FirstTemplate>This is the first template.</FirstTemplate> </aspSample:TemplatedFirstControl> <br /> <aspSample:TemplatedFirstControl id="TemplatedFirstControl2" runat="server"> </aspSample:TemplatedFirstControl> </div> </form> </body> </html>
![.NET Framework のセキュリティ](http://weblio.hs.llnwd.net/e7/img/dict/msdnc/minus.gif)
![継承階層](http://weblio.hs.llnwd.net/e7/img/dict/msdnc/minus.gif)
System.Attribute
System.Web.UI.TemplateContainerAttribute
![スレッド セーフ](http://weblio.hs.llnwd.net/e7/img/dict/msdnc/minus.gif)
![プラットフォーム](http://weblio.hs.llnwd.net/e7/img/dict/msdnc/minus.gif)
Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
![バージョン情報](http://weblio.hs.llnwd.net/e7/img/dict/msdnc/minus.gif)
![参照](http://weblio.hs.llnwd.net/e7/img/dict/msdnc/minus.gif)
- TemplateContainerAttribute クラスのページへのリンク