访问后面的代码中的无序列表控件ID

时间:2011-05-18 15:16:10

标签: c# asp.net

我在usercontrol中有ul元素,如下所示

<u><ul>
  <li id="liMiddle" class="off">
                    <a href="#">One
                    </a>
                    <ul id="One" runat="server">

                </ul>
              </li>
              <li id="liMiddle" class="off">
                <a href="#">Two
                </a>
                <ul id="Two" runat="server">

                </ul>
              </li>
              <li id="liMiddle" class="off">
                <a href="#">Three
                </a>
                <ul id="Three" runat="server">

                </ul>

foreach(子网站中的SPWeb超级站点)                         {                             int i = 0;                             HtmlGenericControl li = new HtmlGenericControl(“li”);

                        CurrentTab.Controls.Add(li);

                        HtmlGenericControl anchor = new HtmlGenericControl("a");
                        anchor.Attributes.Add("href", supersubsite.Url);
                        anchor.InnerText = supersubsite.Title;
                        li.Controls.Add(anchor);
                       } </u> 

此处在每个循环中,Current选项卡应更改为相应的下一个ul id。如何访问它?

我必须在上面的ul下动态生成'li'元素。所以我需要在代码隐藏中逐个访问所有'ul'id。

有人可以告诉我解决方案吗?

2 个答案:

答案 0 :(得分:5)

我会在代码隐藏中实现一个集合,您可以在presenter/controllerpage_load/click_events/..中添加列表项 然后在ASP.NET MVC样式中简单循环..

// YourPage.aspx.cs:
private readonly ICollection<string> items = new Collection<string> { "one", "two" };

// YourPage.aspx
<ul>
    <% foreach (var stringItem in this.items) { %>
    <li><%= stringItem %></li>
    <% } %>
</ul>

答案 1 :(得分:1)

您可以使用带有自定义UserListItem类/结构的Add方法创建自己的ListBuilder类。在这些类中,您可以使用TagBuilder使用为UserListItem构建的自定义类/结构来创建LI和UL标记。您可以使用用户定义的密钥存储您在该自定义ListBuilder类中构建的当前列表的静态字典。

这样,如果您需要从后面的代码中动态获取List或ListItems,您可以使用ListBuilder并按ID引用它们。

下面的代码有点粗糙,但这是一般的想法:

using System.Collections.Generic;
using System.Web.Mvc;
using System;

public class UserList
{
    public List<UserListItem> UserListItems = new List<UserListItem>();
    public void Add(UserListItem item)
    {
        UserListItems.Add(item);
    }
}

public class UserListItem
{
    public string Name { get; set; }
}


public class ListBuilder
{
    static Dictionary<string, UserList> userLists = new Dictionary<string, UserList>();
    public ListBuilder(string listId)
    {
        UserList newList = new UserList();
        newList.Add(new UserListItem() { Name = "Item1" });
        newList.Add(new UserListItem() { Name = "Item2" });
        userLists.Add(listId, newList);
    }
    public static UserList GetList(string listId)
    {
        return userLists[listId];
    }
    public static string BuildList(string listId)
    {
        UserList list = userLists[listId];
        TagBuilder listTagBuilder = new TagBuilder("ul");

        list.UserListItems.ForEach(listItem =>
        {
            TagBuilder listItemTagBuilder = new TagBuilder("li") { InnerHtml = listItem.Name };
            listTagBuilder.InnerHtml += listItemTagBuilder.ToString(TagRenderMode.Normal);
        });
        return listTagBuilder.ToString(TagRenderMode.Normal);
    }
}