TemplateContainerAttribute-Klasse
Deklariert den Basistyp des Containersteuerelements einer Eigenschaft, die eine ITemplate-Schnittstelle zurückgibt und mit dem TemplateContainerAttribute-Attribut gekennzeichnet ist. Das Steuerelement mit der ITemplate-Eigenschaft muss die INamingContainer-Schnittstelle implementieren. Die Klasse kann nicht geerbt werden.
Namespace: System.Web.UI
Assembly: System.Web (in system.web.dll)
Syntax
'Declaration
<AttributeUsageAttribute(AttributeTargets.Property)> _
Public NotInheritable Class TemplateContainerAttribute
Inherits Attribute
'Usage
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
Hinweise
Das als Parameter des TemplateContainerAttribute-Objekts übergebene Type-Objekt wird vom Parser als Typ des in Datenbindungsausdrücken verwendeten Container-Objekts verwendet. Das Steuerelement, dessen Eigenschaft eine ITemplate-Schnittstelle zurückgibt und mit TemplateContainerAttribute markiert ist, muss die INamingContainer-Schnittstelle implementieren.
Weitere Informationen über das Verwenden von Attributen finden Sie unter Erweitern von Metadaten mithilfe von Attributen.
Thema | Position |
---|---|
Gewusst wie: Erstellen von vorlagenbasierten ASP.NET-Benutzersteuerelementen | Erstellen von ASP.NET-Webanwendungen in Visual Studio |
Gewusst wie: Erstellen von vorlagenbasierten ASP.NET-Benutzersteuerelementen | Erstellen von ASP.NET-Webanwendungen in Visual Studio |
Gewusst wie: Erstellen von vorlagenbasierten ASP.NET-Benutzersteuerelementen | Erstellen von ASP.NET-Webanwendungen |
Beispiel
Im folgenden Codebeispiel wird veranschaulicht, wie ein mit dem Namen TemplatedFirstControl
benanntes Steuerelement mit Vorlage erstellt und einem Container mit dem Namen FirstTemplateContainer
zugeordnet wird. Damit können benutzerdefinierte Steuerelemente erstellt werden, die bei nicht angegebener Vorlage die Serverzeit anzeigen. Wenn die Vorlage angegeben ist, wird der Vorlageninhalt angezeigt.
' 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
Im folgenden Web Form wird die Verwendung des im vorangehenden Codebeispiel erstellten benutzerdefinierten Steuerelements veranschaulicht. Zwei Instanzen von TemplatedFirstControl
werden auf der Seite platziert:
Die erste Instanz schließt die Vorlage <FirstTemplate> ein.
Die zweite Instanz schließt <FirstTemplate> nicht ein, weshalb nur die Zeit angezeigt wird.
<%@ 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-Sicherheit
- AspNetHostingPermission für den Betrieb in einer Hostumgebung. Anforderungswert: LinkDemand; Berechtigungswert: Minimal.
Vererbungshierarchie
System.Object
System.Attribute
System.Web.UI.TemplateContainerAttribute
Threadsicherheit
Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Plattformen
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 unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
Siehe auch
Referenz
TemplateContainerAttribute-Member
System.Web.UI-Namespace
Attribute