我有一个带有单级下拉菜单的asp.net站点地图。我在母版页中使用以下代码,通过生成<li>
和<ul>
将其显示为下拉菜单。它工作正常的问题是,即使某些项目没有子项目,它生成为空,这会导致显示下拉图标。
如何通过检查子节点数来停止空<ul>
代。
<!--- Menu -->
<div id="horizontalcssmenu" class="horizontalcssmenu">
<asp:SiteMapDataSource ID="SiteMapDataSource1" ShowStartingNode="false" runat="server" />
<ul id="cssmenu1">
<li><a id="A1" href="index.aspx" runat="server">Home</a></li>
<asp:Repeater ID="foo" DataSourceID="SiteMapDataSource1" EnableViewState="false"
runat="server" onitemcommand="foo_ItemCommand">
<ItemTemplate>
<li>
<a href='<%#Eval("url") %>'><%#Eval("Title") %></a>
<ul>
<asp:Repeater ID="bar" DataSource='<%# ((SiteMapNode) Container.DataItem).ChildNodes %>' runat="server">
<ItemTemplate>
<li><a href='<%#Eval("url") %>'><%#Eval("Title") %></a></li>
</ItemTemplate>
</asp:Repeater>
</ul>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
</div>
<!-- Menu End -->
输出代码显示如下
<!--- Menu -->
<div id="horizontalcssmenu" class="horizontalcssmenu">
<ul id="cssmenu1">
<li><a href="index.aspx" id="ctl00_A1">Home</a></li>
<li>
<a href='/SVSS/StudentFullDetails.aspx'>Student Details</a>
<ul>
</ul>
</li>
<li>
<a href='/SVSS/StudentMonthlyAttendance.aspx'>Attendance</a>
<ul>
</ul>
</li>
<li>
<a href='/SVSS/MyNotice.aspx'>Notice</a>
<ul>
</ul>
</li>
</ul>
</div>
<!-- Menu End -->
答案 0 :(得分:2)
如下:
<%if(((SiteMapNode) Container.DataItem).ChildNodes.Length > 0) { %>
<ul>
<asp:Repeater ID="bar" DataSource='<%# ((SiteMapNode) Container.DataItem).ChildNodes %>' runat="server">
<ItemTemplate>
<li><a href='<%#Eval("url") %>'><%#Eval("Title") %></a></li>
</ItemTemplate>
</asp:Repeater>
</ul>
<%}>
答案 1 :(得分:1)
有点晚了,但可能会帮助别人。 尝试设置转发器的Visible属性,如下所示。
Visible="<%# ((SiteMapNode)Container.DataItem).ChildNodes.Count > 0 ? true : false %>"
答案 2 :(得分:0)
重要的是-> If(CType(Container.DataItem,SiteMapNode).HasChildNodes 它对引导导航栏有好处 需要为活动节点添加活动
<nav class="navbar navbar-expand-sm navbar-toggleable-sm bg-white navbar-light border-bottom box-shadow mb-3">
<a id="HlBrand" href="#" class="navbar-brand" title="xx">
logo
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse" role="navigation" id="navbarText">
<ul class="navbar-nav ml-auto" role="menu">
<%--<li>
<asp:HyperLink runat="server" CssClass="nav-link" ID="lnkHome" NavigateUrl="~/">Home</asp:HyperLink>
</li>--%>
<asp:Repeater runat="server" ID="menu" DataSourceID="SiteMapDataSource1">
<ItemTemplate>
<li class="nav-item dropdown">
<%--<%# If(CType(Container.DataItem, SiteMapNode).HasChildNodes, "nav-link dropdown-toggle", "nav-link")%>--%>
<asp:HyperLink ID="lnkMenuItem" CssClass='<%# If(CType(Container.DataItem, SiteMapNode).HasChildNodes, "nav-link dropdown-toggle", "nav-link")%>' data-toggle="dropdown" aria-expanded="false" aria-haspopup="true" runat="server" title='<%# Eval("description") %>' NavigateUrl='<%# Eval("Url") %>'><%# Eval("Title") %></asp:HyperLink>
<asp:Repeater ID="submenu" runat="server" DataSource="<%# CType(Container.DataItem, SiteMapNode).ChildNodes %>">
<HeaderTemplate>
<div role="menu" aria-labelledby="" class="dropdown-menu">
</HeaderTemplate>
<ItemTemplate>
<asp:HyperLink ID="lnkMenuItem" CssClass="dropdown-item" runat="server" NavigateUrl='<%# Eval("Url") %>'><%# Eval("Title") %></asp:HyperLink>
</ItemTemplate>
<FooterTemplate>
</div>
</FooterTemplate>
</asp:Repeater>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
</div>
</nav>
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="false" />