2009-12-08 8 views
1

Je n'arrive pas à trouver d'exemples sur la façon d'implémenter ITemplates avec plusieurs instances. Tout ce que je dois faire est de construire une navigation qui a un modèle pour le contenu de chaque élément de navigation.ASP.NET ITemplate avec TemplateInstance.Multiple

Répondre

2

Si votre contrôle n'est pas un contrôle de base de données, vous pouvez résoudre le problème de la manière suivante. Mais, je ne l'ai pas testé.

public class FooItem : WebControl, INamingContainer 
{ 

    protected override CreateChildControls() 
    { 
     Control placeHolder = this.FindControl(((Foo)this.Parent).ItemPlaceHolderId); 
     if (placeHolder != null) 
     { 
      // Add some controls to the placeHolder. 
     } 
    } 

} 

public class Foo : WebControl, INamingContainer 
{ 

    public ITemplate ItemTemplate { get; set; } 

    public string ItemPlaceHolderId 
    { 
     get { ... } 
     set { ... } 
    } 

    public FooItemCollection Items 
    { 
     get { ... } 
    } 

    protected override CreateChildControls() 
    { 
     foreach (FooItem item in this.Items) 
     { 
      this.ItemTemplate.InstantiateIn(item); 
     } 
    } 

} 
1

Regardez la documentation de la création d'un contrôle basé sur des données. Malheureusement, la meilleure documentation que j'ai trouvée vient de .NET 1.1: Developing a Templated Data-Bound Control.


Note de MSDN:

Cette classe TemplateInstanceAttribute est facultative. Si une propriété de modèle est non étendue avec une classe TemplateInstanceAttribute, la valeur par défaut , le champ Multiple, est utilisé.

Ainsi, tout ITemplate exemple qui n'utilise pas le TemplateInstanceAttribute est d'utiliser TemplateInstance.Multiple.

+0

Bien que cela vous aidera probablement je ne ai pas besoin ou si vous voulez mon contrôle à DataBound. – Chris

+0

Je n'ai pas suggéré que votre contrôle devrait être databound, seulement que vous devriez regarder la documentation, car c'était probablement la seule documentation de créer plusieurs instances d'un seul paramètre 'ITemplate'. –

Questions connexes