ASP控制带有嵌套列表的无序列表UL
本文关键字:列表 UL 无序 嵌套 控制 ASP | 更新日期: 2024-10-20 21:01:46
我尝试了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 no 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列表,点击项目后,它将检查数据库中是否存在嵌套项目,并将它们作为嵌套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;
}
}
}
如果您只需要从codeehind访问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
s从码背构建。
另一种选择是使用用户控件:http://msdn.microsoft.com/en-us/library/y6wb1a0e%28v=vs.100%29.aspx