我尝试了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列表,点击项目后,如果存在嵌套项目,将检查db,并将它们作为嵌套ul添加到点击列表中。
由于性能的原因,我无法立即渲染整个菜单。
对不起,如果我不是很清楚。 谢谢你的帮助。
答案 0 :(得分:2)
您需要使用嵌套转发器:
<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;
}
}
}
答案 1 :(得分:1)
如果您只需要访问代码隐藏中的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