Карта сайта ASP.NET не отображает дочерние узлы с использованием asp: repeater - PullRequest
1 голос
/ 13 января 2011

Выше мой код ASP.NET

<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />                
<ul>
    <asp:Repeater runat="server" ID="menuRepeater" DataSourceID="SiteMapDataSource1">
        <ItemTemplate>
            <li>
                <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("Url") %>' Text='<%# Eval("Title") %>' />
            </li>
        </ItemTemplate>
    </asp:Repeater>
</ul>

и вот карта сайта

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode url="~/Default.aspx" title="Homepage">
    <siteMapNode url="~/Login.aspx" title="Login"/>
    <siteMapNode url="~/News.aspx" title="News"/>
    <siteMapNode url="~/Preferences.aspx" title="Preferences"/>
  </siteMapNode>
</siteMap>

Проблема с приведенным выше кодом заключается в том, что он показывает только родительский узел (~ / Default.aspx), однако, когда я использую элемент управления Menu или TreeView и указываю SiteMapDataSource, все работает правильно. Подскажите, пожалуйста, где я не прав?

Ответы [ 2 ]

2 голосов
/ 13 января 2011

set ShowStartingNode = "false" в разметке SiteMapDataSource.

0 голосов
/ 10 апреля 2015

Ссылка на предложение и комментарий Виджея в конечном итоге также дала мне ответ.

Сводная версия: вложенных повторителей , а также параметр ShowStartingNode = false. Ради потомства, код по ссылке выше:

<asp:SiteMapDataSource ID="siteMapDataSource1" runat="server" ShowStartingNode="false" />
<asp:Repeater runat="server" ID="menu" DataSourceID="SiteMapDataSource1">
    <ItemTemplate>
        <li>
            <asp:HyperLink runat="server"
             NavigateUrl='<%# Eval("Url") %>'>
             <%# Eval("Title") %></asp:HyperLink>

            <asp:Repeater runat="server"
                DataSource='<%# ((SiteMapNode) Container.DataItem).ChildNodes %>'>
                <HeaderTemplate>
                    <ul>
                </HeaderTemplate>

                <ItemTemplate>
                    <li>
                        <asp:HyperLink runat="server"
                         NavigateUrl='<%# Eval("Url") %>'>
                         <%# Eval("Title") %></asp:HyperLink>
                    </li>
                </ItemTemplate>

                <FooterTemplate>
                    </ul>
                </FooterTemplate>
            </asp:Repeater>
        </li>
    </ItemTemplate>
</asp:Repeater>
...