Ajouter à la liste à partir de codebehind C# Asp.net

j'ai une liste UL dans une page ASPX:

<ul id="tabs">
 <li id="tab1"><a href="ztab1.htm">Tab 1</a></li>
 <li id="tab2"><a href="ztab2.htm">Tab 2</a></li>
 <li id="tab3"><a href="ztab3.htm">Tab 3</a></li>
 <li id="tab4"><a href="ztab4.htm">Tab 4</a></li>
 </ul> 

je voudrais ajouter des éléments de liste dynamiquement à partir de codebehind, y compris l'entrée href pour chaque nouvel élément de liste.

Comment?

24
demandé sur Tromus 2010-08-20 16:51:59
la source

5 ответов

Vous devez marquer votre ul comme un serveur de commande, puis traiter le "nouvel élément" comme un HtmlGenericControl et l'insérer dans le contrôle de la collecte:

<ul runat="server" id="tabs"> 

pour ajouter l'élément, créez un nouvel élément et ajoutez-le:

HtmlGenericControl li = new HtmlGenericControl("li");
tabs.Controls.Add(li);

HtmlGenericControl anchor = new HtmlGenericControl("a");
anchor.Attributes.Add("href", "page.htm");
anchor.InnerText = "TabX";

li.Controls.Add(anchor);
51
répondu GenericTypeTea 2015-06-11 11:27:46
la source

Utiliser asp: bulletedList et votre liste sera beaucoup plus facile.

<asp:BulletedList id="blTabs" 
  BulletStyle="Disc"
  DisplayMode="LinkButton" 
  runat="server">
    <asp:ListItem Value="ztab1.htm">tab1</asp:ListItem>
    <asp:ListItem Value="ztab2.htm">tab2</asp:ListItem>
    <asp:ListItem Value="ztab3.htm">tab3</asp:ListItem>
</asp:BulletedList>

Code Behind:

    ListItem li = new ListItem();
    li.Value = "*.html";  //html goes here i.e.  xtab1.html
    li.Text = "New Text";  //text name goes i.e. here tab1
    blTabs.Items.Add(li);
9
répondu Nix 2010-08-20 17:04:36
la source

ce résultat est le même que celui de GenericTypeTea, mais la différence est que le HTML est 'écrit' dans le code derrière et injecté dans la page.

Dans votre balise:

<asp:Literal id="litMarkup" runat="server" />

Dans votre code derrière:

List<string> locations  // however this initialized 

StringBuilder sb = new StringBuilder();

sb.Append("<ul id=\"tabs\">");

for (int i = 0; i < locations.Count; i++)
{
   sb.Append("<li id=\"tab" + i.ToString() + "\"><a href=\"" + locations[i] + "\">Tab " + i.ToString() + "</a></li>");
}

sb.Append("</ul>");

litMarkup.Text = sb.ToString();
5
répondu Scott Lance 2010-08-20 17:44:15
la source

vous pouvez créer une UL dynamique en utilisant un asp:Repeater Contrôle

Vous pouvez utiliser le répéteur manière suivante, dans votre .aspx le fichier

<asp:Repeater ID="menu_ul_1" runat="server">
    <HeaderTemplate>
    <ul class="my-menu">
    </HeaderTemplate>
    <ItemTemplate>
        <li>
        <a href='<%# Eval("href_li")%>'>
        <%# Eval("DisplayText")%></a>
        </li>
    </ItemTemplate>
    <FooterTemplate>
        </ul>
    </FooterTemplate>
</asp:Repeater>

Et vous pouvez mettre de la dynamique de données via le code derrière .aspx.cs le fichier

protected void Page_Load(object sender, EventArgs e)
{
    DataTable newsDataTable = new DataTable();

    // add some columns to our datatable
    newsDataTable.Columns.Add("href_li");
    newsDataTable.Columns.Add("DisplayText");

    for (int i = 1; i <= 5; i++)
    {
        DataRow newsDataRow = newsDataTable.NewRow();
        newsDataRow["href_li"] = "?sc=item_" + i;
        newsDataRow["DisplayText"] = "List Item # "+i;
        newsDataTable.Rows.Add(newsDataRow);
    }
    menu_ul_1.DataSource = newsDataTable;
    menu_ul_1.DataBind();
}

Résultat: Vous obtiendrez html suivant grâce à ce code

<ul class="my-menu">
    <li><a href='?sc=item_1'>List Item # 1</a> </li>
    <li><a href='?sc=item_2'>List Item # 2</a> </li>
    <li><a href='?sc=item_3'>List Item # 3</a> </li>
    <li><a href='?sc=item_4'>List Item # 4</a> </li>
    <li><a href='?sc=item_5'>List Item # 5</a> </li>
</ul>
4
répondu Muhammad Nabeel Arif 2012-06-10 21:08:22
la source

imbriqué avec parent child, utilisez vos éléments comme ci-dessous

Dim newLi = New HtmlGenericControl("li")
        Dim anchor = New HtmlGenericControl("a")
        anchor.Attributes.Add("href", itemrow.Item("reg_url").ToString().Trim())
        anchor.InnerText = itemrow.Item("conf_name")
        newLi.Controls.Add(anchor)
        eventList.Controls.Add(newLi)
0
répondu mzonerz 2017-03-20 12:34:30
la source

Autres questions sur