Comment créer un contrôle personnalisé ASP.NET avec une propriété de collection?


12

Je cherche à faire quelque chose de semblable à

<cstm:MyControl runat="server"> 
    <myItem attr="something" /> 
    <myItem attr="something" /> 
</cstm:MyControl> 

Quel est le code nécessaire pour les os nus retirer ceci?

exemple de Rick montre quelque chose de semblable à

<cstm:MyControl runat="server"> 
    <myItems> 
     <cstm:myItem attr="something" /> 
     <cstm:myItem attr="something" /> 
    </myItems> 
</cstm:MyControl> 

Je préfère la syntaxe plus laconique si possible.

Note: N'hésitez pas à suggérer un meilleur titre ou une description. Même si vous n'avez pas de droits d'édition, je suis heureux d'éditer l'entrée pour le bien de la communauté.

  0

Je suggère de modifier le titre de ce à "Comment construire un contrôle personnalisé ASP.NET avec une propriété de collection par défaut?", car il existe quelques explications sur la construction d'un contrôle avec une propriété de collection déclarative, mais peu expliquent comment en faire la propriété par défaut. 23 sept.. 082008-09-23 21:10:07

17

est ici un contrôle exemple très simple qui fait exactement ce que vous cherchez:

namespace TestControl 
{ 
    [ParseChildren(true, DefaultProperty = "Names")] 
    public class MyControl : Control 
    { 
     public MyControl() 
     { 
      this.Names = new List<PersonName>(); 
     } 

     [PersistenceMode(PersistenceMode.InnerDefaultProperty)] 
     public List<PersonName> Names { get; set; } 
    } 

    public class PersonName 
    { 
     public string Name { get; set; } 
    } 
} 

Et, voici un exemple d'utilisation:

<%@ Register Namespace="TestControl" TagPrefix="TestControl" %> 

<TestControl:MyControl runat="server" ID="MyControl1"> 
    <TestControl:PersonName Name="Chris"></TestControl:PersonName> 
    <TestControl:PersonName Name="John"></TestControl:PersonName> 
</TestControl:MyControl>