ASP.NET用户控件内部内容

时间:2009-12-16 04:25:13

标签: asp.net user-controls

我有一个接受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属性正常工作。

感谢。

2 个答案:

答案 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);
}