Карта сайта ASP.NET как проблема отображения выпадающего меню с не дочерними элементами - PullRequest
1 голос
/ 27 сентября 2011

У меня есть карта сайта 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 -->

enter image description here

В выходном коде отображается что-то вроде этого

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

Ответы [ 3 ]

2 голосов
/ 01 ноября 2011

Как насчет чего-то вроде:

<%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 голос
/ 16 мая 2012

Немного поздно, но может помочь другим. Попробуйте установить свойство Visible ретранслятора следующим образом.

Visible="<%# ((SiteMapNode)Container.DataItem).ChildNodes.Count > 0 ? true : false %>"
0 голосов
/ 18 января 2019

важная вещь -> If (CType (Container.DataItem, SiteMapNode) .HasChildNodes это хорошо для начальной загрузки Navbar необходимо добавить активный для активного узла

            <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" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...