2008-09-23 3 views
12

Ich suche etwas wieWie erstellen Sie ein benutzerdefiniertes ASP.NET-Steuerelement mit einer Auflistungseigenschaft?

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

Was ist die nackten Knochen Code zu tun, um dies zu ziehen aus?

Ricks Beispiel zeigt so etwas wie

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

ich die mehr terse Syntax, wenn möglich bevorzugen würden.

Hinweis: Fühlen Sie sich frei, einen besseren Titel oder eine bessere Beschreibung vorzuschlagen. Auch wenn Sie keine Bearbeitungsrechte haben, bin ich froh, den Eintrag für die Gemeinschaft zu bearbeiten.

+0

würde ich vorschlagen, den Titel dieser Wechsel zu "Wie wird ein benutzerdefiniertes ASP.NET-Steuerelement mit einer standardmäßigen Auflistungseigenschaft erstellt?", da es einige Erklärungen zum Erstellen eines Steuerelements mit einer deklarativen Auflistungseigenschaft gibt, aber nur wenige erläutern, wie es zur Standardeigenschaft wird. –

Antwort

17

Hier ist ein wirklich einfaches Beispiel Steuerelement, das genau das tut, was Sie suchen:

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

Und hier ist ein Beispiel für die Verwendung:

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