像这样创建一个类:
[PersistChildren(false), ParseChildren(true, "ContentTemplate")]
public class CustomContent:WebControl
{
[System.ComponentModel.Browsable(false), System.Web.UI.PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public ITemplate ContentTemplate { get; set; }
private PlaceHolder m_placeHolder;
protected override void CreateChildControls()
{
m_placeHolder = new PlaceHolder();
if (this.ContentTemplate != null)
this.ContentTemplate.InstantiateIn(m_placeHolder);
Controls.Add(m_placeHolder);
}
protected override void RenderContents(HtmlTextWriter writer)
{
writer.Write(@"<div class=""inputfield"">
<div class=""tl"">
<span class=""tr""><!-- --></span>
<span class=""ll""><!-- --></span>
<div class=""lr"">
<div class=""cntnt"">
");
base.RenderContents(writer);
writer.Write(@" </div>
</div>
</div>
</div>
");
}
}
此类不是“用户控件”,而是“服务器控件”。你可以对用户控件做同样的事情,但你会遇到设计器的问题。这将在设计器中工作。你可以把这样的标记放在你的 ASPX 中:
<uc1:CustomContent runat="server" ID="content">
<asp:textbox runat="server"></asp:textbox>
</uc1:CustomContent>
不要忘记 aspx 顶部的注册页面声明
<%@ Register tagprefix="uc1" Assembly="Assembly where CustomContent is" Namespace="namespace where CustomContent is" %>
您可以在 uc1:CustomContent 标记中放置任何您想要的内容,它会在其周围呈现样板 html。如果你对 ITemplate 的工作原理感到好奇,msdn 等上有很多文章。