Я пытаюсь создать вложенный список в Asp.Net/C# с помощью элемента управления ListView. Я посмотрел на множество примеров, но я не могу их отличить.
Вот шаблон:
<ul>
<li>Item 1 - level 1</li>
<li>Item 2 - level 1</li>
<li>Item 3 - level 1
<ul>
<li>Item 1 - level 2</li>
<li>Item 2 - level 2</li>
<li>Item 3 - level 2</li>
</ul>
</li>
</ul>
Я создал список, в котором используется (d3)
Однако, я хотел бы внести изменения.
Только один уровень будет иметь подменю - и возможно, что некоторые элементы уровня 1 не будут иметь дочерних элементов, поэтому я ищу шаблон, который может отображать 0 или 1 подменю.
Кто-нибудь знает что мне нужно сделать с помощью следующего кода для достижения того, что я хочу?
<asp:ListView ID="lv" runat="server"
OnItemDataBound="LV_ItemDataBound">
<LayoutTemplate>
<nav>
<ul class="content-nav">
<asp:PlaceHolder ID="itemPlaceholder" runat="server" />
</ul>
</nav>
</LayoutTemplate>
<ItemTemplate>
<li id="liMenuItem" runat="server">
<asp:HyperLink ID="lnkMenuItem" runat="server"
CssClass="content-nav_link"></asp:HyperLink>
</li>
</ItemTemplate>
</asp:ListView>
protected void LV_ItemDataBound(object source, ListViewItemEventArgs e)
{
var item = e.Item;
if (item.ItemType == ListViewItemType.DataItem)
{
var data = (ContentNavItem)item.DataItem;
var liMenuItem = item.GetControl<HtmlGenericControl>("liMenuItem");
// Do something with the item here
}
}
void Build()
{
var currentId = MenuItems.First(x => x.Route == CurrentUrl).Id;
var currentItems = MenuItems
.Where(x => x.IsTopLevel || x.ParentId == currentId)
.OrderBy(x => x.GroupId).ThenBy(x => x.Anchor);
lv.DataSource = currentItems;
lv.DataBind();
}