it-swarm.com.ru

Добавить в список из codebehind C # Asp.net

У меня есть список UL на странице 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> 

Я хотел бы динамически добавлять элементы списка из кода, включая запись href для каждого нового элемента списка.

Как?

24
Tromus

Вам необходимо пометить ваш ul как серверный элемент управления, затем обработать «новый элемент» как HtmlGenericControl и вставить его в коллекцию элементов управления:

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

Чтобы добавить элемент, создайте новый элемент и добавьте его:

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

Используйте asp: bulletedList и ваш список будет намного проще. 

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

Код позади:

    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

Этот результат такой же, как и у GenericTypeTea, но разница в том, что HTML-код «записан» в коде и вставлен в страницу.

В вашей разметке:

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

В вашем коде позади:

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

Вы можете создать динамический UL с помощью элемента управления asp:Repeater

Вы можете использовать ретранслятор следующим образом, в своем файле .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>

И вы можете поместить динамические данные с помощью кода в файл .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();
}

Результат: Вы получите следующий 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>
4
Muhammad Nabeel Arif

вложенный с родительским дочерним элементом, используйте ваши элементы как ниже 

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