ASP.NET站点地图作为下拉菜单显示非子元素问题

ASP.NET站点地图作为下拉菜单显示非子元素问题,asp.net,sitemap,drop-down-menu,Asp.net,Sitemap,Drop Down Menu,我有一个带有单级下拉菜单的asp.net网站地图。我在母版页中使用以下代码,通过生成和将它们显示为下拉菜单。它工作得很好问题是,即使某些项目没有子项目,它也会生成空项目,这会导致显示下拉图标。 如何通过检查子节点计数来停止空的生成 <!--- Menu --> <div id="horizontalcssmenu" class="horizontalcssmenu"> <asp:SiteMapDataSource

我有一个带有单级下拉菜单的asp.net网站地图。我在母版页中使用以下代码,通过生成
    将它们显示为下拉菜单。它工作得很好问题是,即使某些项目没有子项目,它也会生成空项目,这会导致显示下拉图标。 如何通过检查子节点计数来停止空的
    生成

        <!---  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 -->
    
    
    

    像这样的东西怎么样:

    <%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>
    <%}>
    
    0){%>
    

    有点晚,但可能会帮助其他人。 尝试设置中继器的Visible属性,如下所示

    Visible="<%# ((SiteMapNode)Container.DataItem).ChildNodes.Count > 0 ? true : false %>"
    
    Visible=“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" />
    
    
    

    我早些时候试过,但没有成功。如果有错误,请将其保留在内部condition@Ajay-你也试过用“#”吗?