2010-07-18 16 views
10

Tengo este control web al que he estado agregando controles dinámicamente, pero ahora el requisito es agregar una lista ordenada alrededor de los controles.Creando una lista desordenada con controles asp.net?

para hacer que los controles añado los controles a 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)); 

    } 

y este es el html + Red PEA ctrls Quiero construir:

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

¿Cómo posicionar los controles en la lista ¿artículos? ¿Debo abordar el problema de manera diferente?

Respuesta

11

cambiar esta línea:

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

Para estas líneas:

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

Este código no tiene sentido para mí; Creo que 'Controls.Add' devuelve' void', entonces, ¿cómo puedes usar su resultado como argumento? – Sam

+1

No estoy intentando utilizar ningún resultado de Controls.Add –

+0

Parece que eres para mí; está intentando usar el resultado de 'Controls.Add' como el argumento de' ol.Controls.Add'. Tu código no compila para mí. – Sam

7

que sugeriría para crear un árbol de HtmlGenericControls: http://msdn.microsoft.com/library/system.web.ui.htmlcontrols.htmlgenericcontrol.aspx

+0

Usar esta clase definitivamente es el camino a seguir. No solo crea un código de procedimiento legible y limpio, sino que también te evita mirar a las lambdas locas para completar una tarea tan simple. – afuzzyllama

+0

@afuzzyllama No tiene que usar ninguna lambda. Solo use un foreach regular si lo desea. Todo lo que la sintaxis lambda está haciendo es salvarte de escribir código con un montón de variables de uso de una sola vez. – MiniRagnarok

Cuestiones relacionadas