llene un control de lista html usando .NET

Tengo una lista definida así:

  • Item 1
  • Item 2

Usando .NET, ¿cómo puedo agregar elementos a la lista de forma dinámica? También necesito especificar el nombre de clase en cada elemento nuevo

incluso puedes usar ese HTML, agregando runat = “server” podrás tratarlo como un HTMLControl no importa qué control sea, lo hago a menudo con div’s

 
  • Item 1
  • Item 2

entonces obtienes ese HTMLControl y juegas con él

 HtmlGenericControl li; for (int x = 3; x <= 10; x++) { li = new HtmlGenericControl("li"); li.Attributes.Add("class", "myItemClass"); li.InnerText = "Item " + x; myList.Controls.Add(li); } 

terminarás con:

  
  • Item 1
  • Item 2
  • Item 3
  • Item 4
  • Item 5
  • Item 6
  • Item 7
  • Item 8
  • Item 9
  • Item 10

por supuesto, puede usar una lista ordenada o no ordenadora, también debajo de los controles web de ASP.NET.

  

Podría usar asp: BulletedList like

    

Agregar agregar código como

 ListItem item = new ListItem("Item2"); item.Attributes.Add("class", "MyClass"); MyList1.Items.Add(item); 

O si por algún motivo específico necesita utilizar la etiqueta ul, puede agregarle una runat = “servidor”. P.ej

 
  • Item1

Con código como

 HtmlGenericControl li = new HtmlGenericControl("li"); li.Attributes.Add("class", "MyClass"); li.InnerText = "Item2"; MyList2.Controls.Add(li); 

La forma más simple de resolver este problema es usar el control de repetidor asp

 
  • <%# Eval("Item") %>

[Editar]: recuerde configurar el origen de datos en repeaterMyList y llame a databind en el control del repetidor en el código subyacente.

 repeaterMyList.DataSource = someDataTable; repeaterMyList.DataBind(); 

Supongo que hay una razón válida para que no use el control del servidor web BulletedList. De todos modos, este es un ejercicio de progtwigción interesante que ilustra los aspectos internos de la architecture Htmlservercontrol y cómo se asignan a las tags HTML simples.

Las tags HTML ul y li no se asignan directamente como controles HTMLServer. Esto significa que incluso si agrega un atributo runat="server" a la lista, sus contenidos no serán accesibles directamente como listitems.

Sin embargo, todos los controles no mapeados directamente como controles del servidor Html son accesibles a través de la clase HtmlGenericControl . Esto hace posible crear y modificar dichos controles dinámicamente.

La solución, por lo tanto, es doble:

  • Haga la lista desordenada runat="server" para que pueda acceder a ella en el código del lado del servidor. Además, debe hacer que los elementos existentes en la lista runat="server" , de lo contrario solo serán accesibles como LiteralControl que contiene los primeros dos elementos de lista como texto sin formato.
  • En el código, acceda al contenido de la lista y agregue un nuevo HtmlGenericControl de tipo “li”.

La siguiente página (simple) muestra este procedimiento:


 <%@ Page Language="VB" AutoEventWireup="false" %> <%@ Import Namespace="System.Collections.Generic" %>    Test Page   
  • Item 1
  • Item 2