我有一个接受title属性的用户控件。我也想在那个用户控件标签内输入内部HTML(ASP控件),如下所示:
<uc:customPanel title="My panel">
<h1>Here we can add whatever HTML or ASP controls we would like.</h1>
<asp:TextBox></asp:TextBox>
</uc:customPanel>
我怎样才能做到这一点?我有title属性正常工作。
感谢。
答案 0 :(得分:7)
实现一个扩展Panel的类并实现INamingContainer:
public class Container: Panel, INamingContainer
{
}
然后,您的CustomPanel需要公开Container类型的属性和ITemplate类型的另一个属性:
public Container ContainerContent
{
get
{
EnsureChildControls();
return content;
}
}
[TemplateContainer(typeof(Container))]
[TemplateInstance(TemplateInstance.Single)]
public virtual ITemplate Content
{
get { return templateContent; }
set { templateContent = value; }
}
然后在方法CreateChildControls()
中添加:
if (templateContent != null)
{
templateContent.InstantiateIn(content);
}
你会像这样使用它:
<uc:customPanel title="My panel">
<Content>
<h1>Here we can add whatever HTML or ASP controls we would like.</h1>
<asp:TextBox></asp:TextBox>
</Content>
</uc:customPanel>
答案 1 :(得分:0)
您需要确保调用EnsureChildControls。有很多方法可以做到这一点,例如通过CreateChildControls基本方法,但您可以简单地执行此操作以获取要呈现的自定义控件的内部内容。当你需要记住状态和触发事件时,它会变得更加复杂,但对于纯HTML而言,它应该可以工作。
protected override void Render(HtmlTextWriter writer) {
EnsureChildControls();
base.Render(writer);
}