![](/img/trans.png)
[英]Generate Nested Menu from datatable using c# as ul list not Asp.net Menu control
[英]ASP Control unordered list UL with nested list
我尝试了Menu,TreeView,BulletedList,Repeater,HtmlGenericControl,但没有结果。
我想拥有的是呈现某些内容的asp控件:
<ul>
<li><a href="#">Item 1</a></li>
<li><a href="#">Item 2</a>
<ul>
<li><a href="#">Item 2.1</a></li>
</ul>
</li>
</ul>
例如,菜单使SPAN没有UL。
<asp:Menu runat="server">
<Items>
<asp:MenuItem Text="Item 1" />
<asp:MenuItem Text="Item 2">
<asp:MenuItem Text="Item 2.1" />
</asp:MenuItem>
</Items>
</asp:Menu>
我也试过
<asp:Menu RenderingMode="MenuRenderingMode" />
但这不起作用。 我正在使用ASP.NET 3.5。
我需要创建动态ul列表,单击项目后,它将在db中检查是否存在嵌套项目,并将它们作为嵌套ul添加到单击的列表中。
由于性能原因,我无法一次渲染整个菜单。
对不起,如果我不太清楚。 感谢帮助。
您需要使用嵌套的中继器:
<asp:Repeater ID="rptFoo" runat="server" OnItemDataBound="rptFoo_ItemDataBound">
<HeaderTemplate>
<ul>
</HeaderTemplate>
<ItemTemplate>
<li>
<asp:HyperLink ID="lnkFoo" runat="server" />
<asp:Repeater ID="rptBar" runat="server" OnItemDataBound="rptBar_ItemDataBound">
<HeaderTemplate>
<ul>
</HeaderTemplate>
<ItemTemplate>
<li><asp:HyperLink ID="lnkBar" runat="server" /></li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
然后在ItemDataBound
处理程序中,您需要检查每个顶级项目是否都有子元素(如果有),将这些元素分配给子转发器并进行数据绑定,否则将其隐藏。
protected void rptFoo_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
{
FooType obj = (FooType)e.Item.DataItem;
Repeater rptBar = (Repeater)e.Item.FindControl("rptBar");
if(obj.Children.Count() > 0)
{
rptBar.DataSource = obj.Children;
rptBar.DataBind();
}
else
{
rptBar.Visible = false;
}
}
}
如果只需要从代码后面访问ul
和li
元素,则可以轻松地向它们添加runat="server"
属性。 为了能够引用单个元素, id
属性是必需的:
<ul id="mainMenu" runat="server">
<li id="mainMenuItem1" runat="server"><a href="#">Item 1</a></li>
<li id="mainMenuItem2" runat="server"><a href="#">Item 2</a>
<ul id="subMenu" runat="server">
<li id="subMenuItem1" runat="server"><a href="#">Item 2.1</a></li>
</ul>
</li>
</ul>
也可以使用HtmlGenericControl
从代码隐藏中构建此结构。
另一个选择是使用用户控件: http : //msdn.microsoft.com/zh-cn/library/y6wb1a0e%28v=vs.100%29.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.