代码之家  ›  专栏  ›  技术社区  ›  Josh

带有.sitemap文件的ASP.NET菜单控件

  •  1
  • Josh  · 技术社区  · 15 年前

    我对将站点地图文件绑定到ASP.NET中的菜单控件没有太多的经验,我想看看这是否可行(没有很多自定义管道)。

    我正在使用 CSS Friendly Adapters 以获得干净的标记。我已经准备好了CSS来创建水平导航,上面的条代表主导航,下面的条代表子导航。

    本质上,我想转换此站点地图文件:

    <?xml version="1.0" encoding="utf-8" ?>
    <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
        <siteMapNode url="~/Default.aspx" title="Home" description="">
            <siteMapNode url="~/Page1.aspx" title="Page1" description="">
                <siteMapNode url="~/SubPage1_1.aspx" title="Sub Page 1.1"  description="" />
                <siteMapNode url="~/SubPage1_2.aspx" title="Sub Page 1.2"  description="" />
            </siteMapNode>
            <siteMapNode url="~/Page2.aspx" title="Page2"  description="">
                <siteMapNode url="~/SubPage2_1.aspx" title="Sub Page 2.1"  description="" />
                <siteMapNode url="~/SubPage2_2.aspx" title="Sub Page 2.2"  description="" />
            </siteMapNode>
        </siteMapNode>
    </siteMap>
    

    在此标记中:

    <div class="nav" >
        <ul class="fixed">
          <li><a href="Page1.aspx" class="active">Page 1</a></li>
          <li><a href="Page2.aspx">Page 2</a></li>
        </ul>
    </div><!-- end .nav -->
    
    <div class="subnav" >
        <ul class="fixed">
          <li><a href="SubPage1_1.aspx" class="active">Page 1.1</a></li>
          <li><a href="SubPage1_2.aspx">Page 1.2</a></li>
        </ul>
    </div><!-- end .subnav -->
    

    子导航绑定到站点地图中主导航节点的子节点的位置。

    我是否错误地认为这很简单;)

    1 回复  |  直到 13 年前
        1
  •  1
  •   Josh    15 年前

    结果证明了解决方案 其实很简单。

    用两个 SiteMapDataSourceControls 设置第二个 StartingNodeOffset =1,那么您可以通过使用两个中继器有效地实现两层导航方法。

    <ul>
        <asp:Repeater ID="rptMainNavigation" runat="server" DataSourceID="SiteMapDataSourceMainNavigation">
            <ItemTemplate>
                <li><a href="<%# ((SiteMapNode)Container.DataItem).Url %>"><%# ((SiteMapNode)Container.DataItem).Title %></a></li>
            </ItemTemplate>
        </asp:Repeater>
    </ul>
    
    <ul>
        <asp:Repeater ID="rptSubNavigation" runat="server" DataSourceID="SiteMapDataSourceSubNavigation">
            <ItemTemplate>
                <li><a href="<%# ((SiteMapNode)Container.DataItem).Url %>"><%# ((SiteMapNode)Container.DataItem).Title %></a></li>
            </ItemTemplate>
        </asp:Repeater>
    </ul>
    
    <asp:SiteMapDataSource ID="SiteMapDataSourceMainNavigation" runat="server" ShowStartingNode="False" />
    <asp:SiteMapDataSource ID="SiteMapDataSourceSubNavigation" runat="server" ShowStartingNode="False" StartingNodeOffset="1" />