4 votes

Contenu interne du contrôle utilisateur ASP.NET

J'ai un contrôle utilisateur qui accepte un attribut title. J'aimerais également que le code HTML interne (les contrôles ASP également) soit saisi à l'intérieur de la balise du contrôle utilisateur, comme suit :

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

Comment y parvenir ? L'attribut title fonctionne correctement.

Merci.

7voto

joerage Points 2603

Implémenter une classe qui étend Panel et implémente INamingContainer :

public class Container: Panel, INamingContainer
{
}

Ensuite, votre CustomPanel doit exposer une propriété de type Container et une autre propriété de type ITemplate :

public Container ContainerContent
{
    get
    {
       EnsureChildControls();
       return content;
    }
}
[TemplateContainer(typeof(Container))]
[TemplateInstance(TemplateInstance.Single)]
public virtual ITemplate Content
{
    get { return templateContent; }
    set { templateContent = value; }
}

Ensuite, dans la méthode CreateChildControls() ajouter ceci :

if (templateContent != null)
{
    templateContent.InstantiateIn(content);
}

Et vous l'utiliserez ainsi :

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

0voto

toxaq Points 2427

Vous devez vous assurer que EnsureChildControls est appelé. Il existe plusieurs façons de le faire, par exemple via la méthode de base CreateChildControls, mais vous pouvez simplement le faire pour obtenir le rendu du contenu interne d'un contrôle personnalisé. Les choses se compliquent lorsque vous devez vous souvenir de l'état et déclencher des événements, mais pour du simple HTML, cela devrait fonctionner.

protected override void Render(HtmlTextWriter writer) {
    EnsureChildControls();
    base.Render(writer);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X