web-dev-qa-db-fra.com

Ajouter à la liste 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
Tromus

Vous devez marquer votre ul en tant que contrôle côté serveur, puis traiter le 'nouvel élément' comme une HtmlGenericControl et l'insérer dans la collection de contrôles:

<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
djdd87

Utilisez 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 Derrière:

    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
Nix

Ce résultat est identique à celui de GenericTypeTea, mais la différence est que le code HTML est "écrit" dans le code situé derrière et injecté dans la page.

Dans votre balisage:

<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
Scott Lance

Vous pouvez créer un UL dynamique à l’aide d’un contrôle asp:Repeater.

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

<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 des données dynamiques via le code derrière dans le fichier .aspx.cs

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 le code 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

imbriqué avec l'enfant parent, 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
mzonerz