2008-09-15 4 views
1

Ich mag würde meine Web-Steuerung besser lesbar im Entwurfsmodus machen, im Grunde möchte ich die Tag-Erklärung wie folgt aussehen:Web Control Properties

<cc1:Ctrl ID="Value1" runat="server">   
    <Values>string value 1</Value> 
    <Values>string value 2</Value> 
</cc1:Ctrl> 

sagen Lets ich eine private Variable im Code haben hinter:

List<string> values = new List<string>(); 

Also, wie kann ich meine Benutzersteuerung ausfüllen die private Variable mit den Werten, die im Markup deklariert sind?


Entschuldigung, ich hätte expliziter sein sollen. Grundsätzlich mag ich die Funktionalität, die die ITemplate bieten (http://msdn.microsoft.com/en-us/library/aa719834.aspx)

Aber in diesem Fall müssen Sie zur Laufzeit wissen, wie viele Vorlagen instansitated werden kann, dh

void Page_Init() { 
if (messageTemplate != null) { 
    for (int i=0; i<5; i++) { 
     MessageContainer container = new MessageContainer(i); 
     messageTemplate.InstantiateIn(container); 
     msgholder.Controls.Add(container); 
    } 
} 

}

In dem gegebenen Beispiel das Markup wie folgt aussieht:

<acme:test runat=server> 
    <MessageTemplate> 
    Hello #<%# Container.Index %>.<br> 
    </MessageTemplate> 
</acme:test> 

Welche schön und sauber ist, ist es keine Tag-Präfixe haben usw. ich möchte wirklich das schöne saubere Tags.

Ich bin wahrscheinlich albern, wenn ich möchte, dass das Markup sauber ist. Ich frage mich nur, ob es etwas Einfaches gibt, das mir fehlt.

Antwort

2

Ich denke, was Sie suchen ist das Attribut:

[PersistenceMode(PersistenceMode.InnerProperty)] 

Persistence Mode

Denken Sie daran, dass Sie Ihren Namespace und Präfix mit registrieren müssen:

<%@ Register Namespace="MyNamespace" TagPrefix="Pref" %> 
0

Ich sehe zwei Optionen, aber beide hängen davon ab, dass Ihre Websteuerung eine Art Sammlung für Ihre Werte implementiert. Die erste Option besteht darin, nur die Sammlung des Steuerelements anstelle Ihrer privaten Variablen zu verwenden. Die andere Option besteht darin, die Auflistung des Steuerelements zur Laufzeit in Ihre private Variable zu kopieren (z. B. im Ereignishandler Page_Load).

Angenommen, Sie verfügen über ein Web-Steuerelement, das eine Sammlung von Elementen wie eine Listbox implementiert. Der Tag sieht wie folgt in der Quellansicht:

<asp:ListBox ID="ListBox1" runat="server"> 
     <asp:ListItem>String 1</asp:ListItem> 
     <asp:ListItem>String 2</asp:ListItem> 
     <asp:ListItem>String 3</asp:ListItem> 
    </asp:ListBox><br /> 

Dann könnten Sie folgenden Code verwenden Ihre private Variable zu laden:

 List<String> values = new List<String>(); 

     foreach (ListItem item in ListBox1.Items) 
     { 
      values.Add(item.Value.ToString()); 
     } 

Wenn Sie dies tun in Page_Load werden Sie wahrscheinlich nur wollen beim initialen Laden ausführen (also nicht bei Postbacks). Auf der anderen Seite können Sie, je nachdem wie Sie es verwenden, einfach die ListBox1.Items-Auflistung verwenden, statt die Wertevariable zu deklarieren und zu initialisieren.

Ich kann mir keine Möglichkeit vorstellen, dies deklarativ zu tun (da Ihre Liste sowieso nicht bis zur Laufzeit instanziiert wird).

Verwandte Themen