【问题标题】:Add to List from codebehind C# Asp.net从代码隐藏 C# Asp.net 添加到列表
【发布时间】:2011-04-01 15:38:49
【问题描述】:

我在 ASPX 页面中有一个 UL 列表:

<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 条目。

怎么做?

【问题讨论】:

    标签: c# asp.net list


    【解决方案1】:

    将它与父子嵌套,使用您的元素如下

    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)
    

    【讨论】:

      【解决方案2】:

      您需要将您的 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);
      

      【讨论】:

      • 应该是tabs.Controls.Add(li)
      • 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)
      • 不起作用 - 投反对票!下次在发布代码之前检查您的答案!@
      【解决方案3】:

      您可以使用 asp:Repeater 控件创建动态 UL

      您可以在.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】:

      这个结果和 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();
      

      【讨论】:

      • 真棒我如何在没有任何解释的情况下被标记为一个完全可行和有效的答案。
      • 碰巧,伙计,不要把它当成个人。一些用户太懦弱,无法为他们的投票做出解释。我没有投反对票,但我猜你得到了它,因为这是一种不明智的做法。不是因为它没有给出相同的输出,而是因为它是一个绝对的维护噩梦,更多的代码而且非常不可读。我们很久以前就从我们的项目中禁止了这种代码。不过,ASP.Net MVC 中的 TagHelper 是一种与您的答案类似的好方法。
      • @GenericTypeTea - 感谢您的解释,我不知道使用文字被认为是一种不好的做法
      • 我认为这是一个很好的解决方案,我认为它对我有用。我将对其进行测试并提供更新。
      【解决方案5】:

      使用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);
      

      【讨论】:

        猜你喜欢
        • 2023-03-20
        • 2012-02-29
        • 2013-02-19
        • 1970-01-01
        • 1970-01-01
        • 2013-05-28
        • 1970-01-01
        • 2014-05-29
        • 1970-01-01
        相关资源
        最近更新 更多