2010-07-18 15 views
10

Ho questo controllo web a cui sono stati aggiunti dinamicamente i controlli, ma ora è necessario aggiungere un elenco ordinato attorno ai controlli.Creazione di una lista non ordinata con controlli asp.net?

di rendere i controlli aggiungo i controlli per 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)); 

    } 

e questo è l'html + aspnet ctrls voglio costruire:

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

Come faccio a posizionare i controlli nella lista elementi? Devo affrontare il problema in modo diverso?

risposta

11

Modifica questa linea:

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

a queste linee:

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

Questo codice non ha senso per me; Penso che 'Controls.Add' restituisca' void', quindi come si può usare il suo risultato come argomento? – Sam

+1

non sto tentando di utilizzare alcun risultato da Controls.Add –

+0

Sembra che tu sia per me; stai cercando di usare il risultato di 'Controls.Add' come argomento di' ol.Controls.Add'. Il tuo codice non viene compilato per me. – Sam

7

vorrei suggerire di creare un albero di HtmlGenericControls: http://msdn.microsoft.com/library/system.web.ui.htmlcontrols.htmlgenericcontrol.aspx

+0

L'utilizzo di questa classe è sicuramente la strada da percorrere. Non solo rende il codice procedurale pulito e leggibile, ma ti evita di guardare pazzi lambda per completare un compito così semplice. – afuzzyllama

+0

@afuzzyllama Non devi usare nessun lambda. Usa una foreach regolare se vuoi. Tutto quello che sta facendo la sintassi lambda ti sta risparmiando dalla scrittura di codice con una serie di variabili monouso. – MiniRagnarok

Problemi correlati