2010-12-10 68 views
1

je définissais 3 usercontrols personnalisés comme ça:Définir une propriété d'une classe de base (ascx) dans un UserControl personnalisé et instancier une classe enfant dans le ASPX

public partial abstract class MyAbstractControl : Usercontrol{ 
    // Base class definition here, with common property and methods 
    public string CommonAttribute {get; set;} 
} 

public partial class MyConcreteControl1 : MyAbstractControl{ 
    // Some specific stuff here 
} 

public partial class MyConcreteControl2 : MyAbstractControl{ 
    // Other specific but different stuff here 
} 

Alors je définissais une autre UserControl qui ont une propriété de la classe de base:

public partial class MyBeautifulControl : UserControl{ 
    [PersistenceMode(PersistenceMode.InnerProperty)] 
    public MyAbstractControl ChildElement{get;set;} 
} 

Dans le fichier ASPX, j'utilise ce contrôle, mais je voudrais définir une instance de MyConcreteControl1 au lieu de MyAbstractControl

Mais si j'écris:

<MyBeautifulControl runat="server" id="beautiful"> 
    <ChildElement commonAttribute="value" /> 
</MyBeautifulControl> 

Le ChildElement ne peut être défini comme un MyAbstractControl exemple. Je voudrais créer un MyConcreteControl1 ou une instance MyConcreteControl2, selon le contexte, et je ne sais pas comment.

Répondre

0

Utilisez le System.Web.UI.TemplateContainerAttribute:

[PersistenceMode(PersistenceMode.InnerProperty), 
TemplateContainer(typeof(MyConcreteControl))] 
public MyAbstractControl ChildElement{get;set;} 

voir le documentation pour plus de détails. Il y a aussi un HOWTO à propos.

+0

Si je fais ce que vous proposez, je dois savoir à l'avance que je vais instancier un MyConcreteControl1 dans la propriété ChildElement, non? – ghusse

+0

Je n'ai pas besoin d'un moyen d'afficher le même modèle avec des modèles différents, mais j'ai besoin d'instancier différents objets avec des propriétés différentes. – ghusse