次の方法で共有


TemplateContainerAttribute クラス

ITemplate インターフェイスを返し、TemplateContainerAttribute 属性でマークされるプロパティのコンテナ コントロールの基本型を宣言します。ITemplate プロパティを持つコントロールは、INamingContainer インターフェイスを実装する必要があります。このクラスは継承できません。

名前空間: System.Web.UI
アセンブリ: System.Web (system.web.dll 内)

構文

'宣言
<AttributeUsageAttribute(AttributeTargets.Property)> _
Public NotInheritable Class TemplateContainerAttribute
    Inherits Attribute
'使用
Dim instance As TemplateContainerAttribute
[AttributeUsageAttribute(AttributeTargets.Property)] 
public sealed class TemplateContainerAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Property)] 
public ref class TemplateContainerAttribute sealed : public Attribute
/** @attribute AttributeUsageAttribute(AttributeTargets.Property) */ 
public final class TemplateContainerAttribute extends Attribute
AttributeUsageAttribute(AttributeTargets.Property) 
public final class TemplateContainerAttribute extends Attribute
適用できません。

解説

パーサーは、TemplateContainerAttribute オブジェクトのパラメータとして渡される Type オブジェクトを、データ バインディング式で使用される Container オブジェクトの型として使用します。ITemplate インターフェイスを返し、TemplateContainerAttribute でマークされるプロパティを持つコントロールは、INamingContainer インターフェイスを実装する必要があります。

属性の使用方法については、「属性を使用したメタデータの拡張」を参照してください。

トピック 場所
方法 : template 宣言された ASP.NET ユーザー コントロールを作成する Visual Studio ASP .NET での Web アプリケーションの作成
方法 : template 宣言された ASP.NET ユーザー コントロールを作成する Visual Studio ASP .NET での Web アプリケーションの作成
方法 : template 宣言された ASP.NET ユーザー コントロールを作成する ASP .NET Web アプリケーションの作成

使用例

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 つのインスタンスがページ上に配置されます。

  • 最初のインスタンスにはテンプレート <FirstTemplate> が含まれます。

  • 2 つ目のインスタンスには <FirstTemplate> は含まれず、時間のみが表示されます。

<%@ 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 xmlns="http://www.w3.org/1999/xhtml" >
<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 xmlns="http://www.w3.org/1999/xhtml" >
<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 のセキュリティ

継承階層

System.Object
   System.Attribute
    System.Web.UI.TemplateContainerAttribute

スレッド セーフ

この型の public static (Visual Basicでは共有) メンバはすべて,スレッド セーフです。インスタンス メンバの場合は,スレッド セーフであるとは限りません。

プラットフォーム

Windows 98,Windows Server 2000 SP4,Windows CE,Windows Millennium Edition,Windows Mobile for Pocket PC,Windows Mobile for Smartphone,Windows Server 2003,Windows XP Media Center Edition,Windows XP Professional x64 Edition,Windows XP SP2,Windows XP Starter Edition

Microsoft .NET Framework 3.0 は Windows Vista,Microsoft Windows XP SP2,および Windows Server 2003 SP1 でサポートされています。

バージョン情報

.NET Framework

サポート対象 : 3.0,2.0,1.1,1.0

参照

関連項目

TemplateContainerAttribute メンバ
System.Web.UI 名前空間
Attribute

その他の技術情報

属性を使用したメタデータの拡張