在站点导航中显示第二级站点地图

本文关键字:二级 站点 地图 站点导航 显示 | 更新日期: 2023-09-27 18:28:57

我有一个这样的网站地图:

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

在站点导航中显示第二级站点地图

要显示基本报告、筛选报告和自定义格式SiteMapNodes的子项,我们可以在初始Repeater的ItemTemplate中添加另一个Repeater。第二个Repeater将绑定到SiteMapNode实例的ChildNodes属性,如下所示:

<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

您需要在新的SiteMapDataSource中指定起始节点,尽管我不确定这是否是最佳方法。我认为最好一次读取代码背后的所有节点,然后使用此源代码在实际页面中填充所需的数据。原因是我不太喜欢将逻辑(将一些数据源绑定到元素当然是逻辑部分)与演示文稿(html等)混合。是的,只在aspx文件中发送数据源很容易,但我不相信这是最好的方法。