#c# #asp.net
#c# #asp.net
Вопрос:
У меня есть элементы ul в usercontrol, как показано ниже
<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 = новый 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>
Здесь в каждом цикле текущая вкладка должна быть изменена на соответствующий следующий идентификатор ul. Как получить к нему доступ?
Я должен динамически генерировать элементы ‘li’ в соответствии с приведенными выше ul. Итак, мне нужно получить доступ ко всем идентификаторам ‘ul’ один за другим в codebehind.
Кто-нибудь может подсказать мне решение?
Комментарии:
1. Разве вы не должны иметь доступ к коду за ним? Что я видел, у вас есть Runat =»Server» для ul и задайте id, и он должен быть доступен.
Ответ №1:
Я бы реализовал коллекцию в codebehind, куда вы могли бы добавлять элементы списка с помощью presenter/controller
или в page_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. Спасибо за ответ. На самом деле я получаю все сайты из sharepoint, и я должен отображать названия этих сайтов в виде вкладок в меню. для этого я использовал структуру ul и li. Каждый сайт может содержать дочерние сайты. Таким образом, дочерние сайты будут отображаться под соответствующим ul. На этом этапе мне нужно получить идентификатор ul и сгенерировать идентификаторы li. Я знаю, как сгенерировать эти идентификаторы li, но не могу получить доступ к идентификаторам ul в foreach.
2. я действительно не понимаю, кажется, у вас есть hyrarchy. Mh .. Вы можете сделать: <%= SomeCodeBehindStringRetunerMethod() %> в вашем aspx, и в этом методе вы генерируете иерархию ul / li / ul / blabla и просто возвращаете html непосредственно на вывод.
3. Я сделал это другим способом. Я просто сохраняю все ul в div и присваиваю идентификатор как ‘mainDiv’. HtmlGenericControl currenttab = (HtmlGenericControl)mainDiv.FindControl(currentSite); Здесь, на текущем сайте, он будет таким же, как мой идентификатор ul. Я получу текущее имя сайта с сайта sharepoint. В любом случае, спасибо за помощь
Ответ №2:
Вы могли бы создать свой собственный класс ListBuilder с помощью метода Add, который принимает пользовательский UserListItem class / struct. Внутри этих классов вы могли бы использовать TagBuilder для создания тегов LI и UL, используя пользовательский класс / структуру, которую вы создали для UserListItem. Вы могли бы хранить статический словарь текущих списков, которые вы создаете, в этом пользовательском классе ListBuilder, используя определенный пользователем ключ.
Таким образом, если вам нужно было получить доступ к вашему списку или элементам списка динамически из исходного кода, вы могли бы просто использовать свой 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);
}
}