Ich habe eine UL-Liste auf einer ASPX-Seite:
<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>
Ich möchte Listenelemente dynamisch aus Codebehind hinzufügen, einschließlich des Eintrags href für jedes neue Listenelement.
Wie?
Sie müssen Ihre ul als serverseitiges Steuerelement markieren, dann das 'neue Element' als HtmlGenericControl
behandeln und es in die Steuerelementauflistung einfügen:
<ul runat="server" id="tabs">
Um das Element hinzuzufügen, erstellen Sie ein neues Element und fügen Sie es hinzu:
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);
Verwenden Sie asp: bulletedList und Ihre Liste wird dadurch wesentlich einfacher.
<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 hinter:
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);
Dieses Ergebnis stimmt mit dem von GenericTypeTea überein, der Unterschied besteht jedoch darin, dass der HTML-Code in den Code dahinter geschrieben und in die Seite eingefügt wird.
In Ihrem Markup:
<asp:Literal id="litMarkup" runat="server" />
In deinem Code dahinter:
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();
Sie können eine dynamische UL mit einem asp:Repeater
-Steuerelement erstellen
Sie können den Repeater auf folgende Weise in Ihrer .aspx
-Datei verwenden
<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>
Sie können dynamische Daten per Code in .aspx.cs
-Datei hinterlegen
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();
}
Ergebnis: Durch diesen Code erhalten Sie folgende HTML
<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>
verschachtelt es mit dem übergeordneten Kind, verwenden Sie Ihre Elemente wie folgt
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)