2009-12-16 7 views
3

J'ai un contrôle utilisateur qui accepte un attribut title. Je voudrais aussi que l'entrée HTML interne (ASP contrôle également) à l'intérieur de cette balise de contrôle utilisateur comme ceci:Contenu interne du contrôle utilisateur ASP.NET

<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 puis-je y parvenir? J'ai l'attribut title qui fonctionne correctement.

Merci.

+0

Je pense que vous ne pouvez pas faire ça ... Mais yo peut le faire en .ascx de ur contrôle utilisateur –

+0

pouvez spécifier un peu vous s'il vous plaît? J'ai <%=title%> et <%=content%> dans mon fichier ascx qui fonctionne bien, mais c'est difficile de passer le code HTML personnalisé à la propriété de contenu. – ademers

+0

System.Web.UI.UserControl ne possède pas de zone de texte de propriété –

Répondre

7

Mettre en œuvre une classe qui étend Panel et met en œuvre INamingContainer:

public class Container: Panel, INamingContainer 
{ 
} 

Ensuite, votre CustomPanel a besoin d'exposer une propriété de type conteneur 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(), ajoutez ceci:

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

Et vous l'utilisera comme ceci:

<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

Vous devez vous assurer que EnsureChildControls est appelé. Il y a un certain nombre de façons de le faire, comme par le biais de la méthode de base CreateChildControls, mais vous pouvez simplement le faire pour obtenir le rendu du contenu interne d'un contrôle personnalisé. Cela devient plus compliqué lorsque vous devez vous rappeler des événements d'état et de déclenchement, mais pour le HTML pur cela devrait fonctionner.

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