2010-07-18 4 views
10

J'ai ce contrôle web auquel j'ajoute dynamiquement des contrôles mais maintenant l'exigence est d'ajouter une liste ordonnée autour des contrôles.Création d'une liste non ordonnée avec les contrôles asp.net?

Pour rendre les commandes ajouter les contrôles à ControlsCollection

protected void Page_Load(object sender, EventArgs e) 
    { 
     var document = XDocument.Load(@"http://localhost:49179/XML/Templatek.xml"); 
     var builder = ObjectFactory.GetInstance<IControlBuilder>(); 
     var controls =builder.BuildControls(document); 
     controls.ToList().ForEach(c => Controls.Add(c)); 

    } 

Et c'est le html + aspnet ctrls Je veux construire:

<fieldset> 
    <ol> 
     <li> 
     <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> 
     </li> 
     <li> 
      <asp:TextBox runat="server" ID="TextBox1"></asp:TextBox> 
     </li> 
    </ol> 
    </fieldset> 

Comment puis-je placer les commandes dans la liste articles? Dois-je aborder le problème différemment?

Répondre

11

Modifier cette ligne:

controls.ToList().ForEach(c => Controls.Add(c)); 

A ces lignes:

Control ol = new HtmlGenericControl("ol"); 
controls.ToList().ForEach(c => ol.Controls.Add(new HtmlGenericControl("li").Controls.Add(c))); 
Controls.Add(ol); 

EDIT:

Control ol = new HtmlGenericControl("ol"); 
    controls.ToList().ForEach(c => 
            { 
             var li = new HtmlGenericControl("li"); 
             li.Controls.Add(c); 
             ol.Controls.Add(li); 
            }); 
    Controls.Add(ol); 
+0

Ce code n'a aucun sens pour moi; Je pense que 'Controls.Add' renvoie' void', alors comment pouvez-vous utiliser son résultat comme argument? – Sam

+1

je n'essaie pas d'utiliser un résultat de Controls.Add –

+0

Il semble que vous êtes à moi; vous essayez d'utiliser le résultat de 'Controls.Add' comme argument de' ol.Controls.Add'. Votre code ne compile pas pour moi. – Sam

7

Je suggère de créer un arbre de HtmlGenericControls: http://msdn.microsoft.com/library/system.web.ui.htmlcontrols.htmlgenericcontrol.aspx

+0

Utiliser cette classe est définitivement la voie à suivre. Non seulement cela rend le code de procédure propre et lisible, mais cela vous évite de regarder des lambdas fous pour accomplir une tâche si simple. – afuzzyllama

+0

@afuzzyllama Vous n'avez pas besoin d'utiliser de lambdas. Utilisez juste une foreach régulière si vous le souhaitez. Tout ce que la syntaxe lambda est en train de faire est de vous éviter d'écrire du code avec un tas de variables à usage unique. – MiniRagnarok