показать второй уровень карты сайта в навигации сайта - PullRequest
0 голосов
/ 24 марта 2012

У меня есть такая карта сайта:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
  <siteMapNode title="Home" >
    <siteMapNode title="Services" >
      <siteMapNode title="Training" url="~/Training.aspx"/>
    </siteMapNode>
  </siteMapNode>
</siteMap>

Теперь я хочу показать второй уровень карты сайта в отдельном разделе.

<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="false" />
<asp:Repeater runat="server" ID="menu" DataSourceID="SiteMapDataSource1"> 
    <asp:HyperLink ID="menu_items" runat="server" NavigateUrl='<%# Eval("Url") %>'><%# Eval("Title") %></asp:HyperLink>
</asp:Repeater>
<div class="separator"></div>
//Here must child Node(s) displayed
//e.g. return <a href="~Training.aspx">Training</a>

Ответы [ 2 ]

1 голос
/ 10 декабря 2012

Чтобы отобразить дочерние элементы для основных отчетов, фильтрации отчетов и настраиваемых форматов SiteMapNodes, мы можем добавить еще один повторитель к исходному шаблону элемента повторителя. Этот второй повторитель будет привязан к свойству ChildNodes экземпляра SiteMapNode, например:

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

Эти два повторителя приводят к следующей разметке (некоторая разметка была удалена для краткости):

<li>
    <a href="/Code/BasicReporting/Default.aspx">Basic Reporting</a>
    <ul>
       <li>
          <a href="/Code/BasicReporting/SimpleDisplay.aspx">Simple Display</a>
       </li>
       <li>
          <a href="/Code/BasicReporting/DeclarativeParams.aspx">Declarative Parameters</a>
       </li>
       <li>
          <a href="/Code/BasicReporting/ProgrammaticParams.aspx">Setting Parameter Values</a>
       </li>
    </ul>
</li>

<li>
    <a href="/Code/Filtering/Default.aspx">Filtering Reports</a>
    ...
</li>

<li>
    <a href="/Code/CustomFormatting/Default.aspx">Customized Formatting</a>
    ...
</li>

взято из: http://msdn.microsoft.com/en-us/library/aa581781.aspx

1 голос
/ 24 марта 2012

Вам нужно указать начальный узел в новом SiteMapDataSource, хотя я не уверен, что это лучший подход.Я считаю, что было бы лучше сразу прочитать все узлы в выделенном фрагменте кода, а затем использовать этот источник, чтобы заполнить фактическую страницу данными, которые вы хотите, где вы хотите.Причина этого в том, что я не большой поклонник смешивания логики (привязка некоторого источника данных к элементам, безусловно, является логической частью) с презентацией (html и т. Д.).Да, было бы просто спамить файл aspx с источниками данных, но я не уверен, что это лучший подход.

...