ASP.NET User Control внутренний контент - PullRequest
4 голосов
/ 16 декабря 2009

У меня есть пользовательский элемент управления, который принимает атрибут заголовка. Мне также хотелось бы, чтобы входной внутренний HTML (также ASP Controls) внутри этого тега пользовательского элемента управления был таким:

<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>

Как мне этого добиться? У меня атрибут заголовка работает правильно.

Спасибо.

Ответы [ 2 ]

7 голосов
/ 16 декабря 2009

Реализация класса, расширяющего 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>
0 голосов
/ 14 мая 2011

Вы должны убедиться, что EnsureChildControls вызывается. Есть несколько способов сделать это, например, с помощью базового метода CreateChildControls, но вы можете просто сделать это, чтобы получить внутреннее содержимое настраиваемого элемента управления для визуализации. Это становится сложнее, когда вам нужно запомнить состояние и вызвать события, но для простого HTML это должно работать.

protected override void Render(HtmlTextWriter writer) {
    EnsureChildControls();
    base.Render(writer);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...