[C#]
using System;
using System.Web;
using System.Web.UI;
namespace CustomControls
{
[
ParseChildren(true)
]
public class TemplatedFirstControl : Control, INamingContainer
{
private ITemplate firstTemplate;
private String text = null;
private Control myTemplateContainer;
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;
}
}
protected override void CreateChildControls ()
{
if (FirstTemplate != null)
{
myTemplateContainer = new FirstTemplateContainer(this);
FirstTemplate.InstantiateIn(myTemplateContainer);
Controls.Add(myTemplateContainer);
}
else
{
Controls.Add(new LiteralControl(Text + " " + DateTime));
}
}
}
}
using System;
using System.Web;
using System.Web.UI;
namespace CustomControls
{
[
ParseChildren(true)
]
public class TemplatedFirstControl : Control, INamingContainer
{
private ITemplate firstTemplate;
private String text = null;
private Control myTemplateContainer;
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;
}
}
protected override void CreateChildControls ()
{
if (FirstTemplate != null)
{
myTemplateContainer = new FirstTemplateContainer(this);
FirstTemplate.InstantiateIn(myTemplateContainer);
Controls.Add(myTemplateContainer);
}
else
{
Controls.Add(new LiteralControl(Text + " " + DateTime));
}
}
}
}
下面的控件是该模板的容器。
[C#] using System; using System.Web; using System.Web.UI; namespace CustomControls { 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; } } } }在页上使用模板化控件
下面的 ASP.NET 页使用了前述示例中定义的模板化控件。它先使用带有两个不同模板的控件,然后又使用不带模板的控件。
<%@ Register TagPrefix="Custom" Namespace="CustomControls" Assembly = "CustomControls" %> <script runat=server language=c#> void Page_Load() { First.DataBind(); Second.DataBind(); } </script> <html> <body> <form runat=server> Here is a custom templated server control:<br><br> <Custom:TemplatedFirstControl id = "First" Text= "The time on the server is " runat=server> <FirstTemplate> <h3><font face="Verdana" color = "red"><%# Container.Text %> <%# Container.DateTime %> </font></h3> </FirstTemplate> </Custom:TemplatedFirstControl> Here is the templated server control with a different template:<br><br> <Custom:TemplatedFirstControl id = "Second" Text= "The time on the server is " runat=server> <FirstTemplate> <h1><font face="Arial" color = "Purple"><%# Container.Text %> <%# Container.DateTime %> </font></h1> </FirstTemplate> </Custom:TemplatedFirstControl> Here is the templated server control without a template:<br><br> <Custom:TemplatedFirstControl id = "Third" Text= "The time on the server is " runat=server/> </form> </body> </html>