SiteMap更改SiteMapProvider?

我有一个从web.sitemap文件构建的自定义菜单导航,第一行是这样的:
SiteMapNodeCollection topLevelNodes = SiteMap.RootNode.ChildNodes;
这有效 - 它从web.sitemap文件中获取所有顶级节点,并允许我查看每个SiteMapNode并执行操作。 但是,现在我希望能够创建多个web.sitemap文件,然后以编程方式确定要使用的web.sitemap文件,但我似乎无法找到如何执行此操作。我假设我可以创建一个自定义SiteMapProvider来执行逻辑来确定要加载哪个web.sitemap文件,或者我有多个提供程序,每个提供程序都将SiteMapFile属性设置为特定的* .sitemap文件,然后切换在我访问SiteMap.RootNode之前以编程方式提供程序。 我认为拥有一个自定义提供程序可能更容易,然后覆盖它查找实际物理站点地图文件位置的部分,但我不清楚我将如何执行此操作 我已经google了很多,但大多数答案似乎是关于标准的sitemappath控件等等,以及如何设置SiteMapDataSource,我认为这与我的方法无关。     
已邀请:
首先,您需要在web.config中指定所有站点地图文件:
<siteMap defaultProvider="FNDSiteMap" enabled="true">
  <providers>
    <add name="FNDSiteMap" type="System.Web.XmlSiteMapProvider" siteMapFile="FND.sitemap" securityTrimmingEnabled="true"/>
    <add name="STASiteMap" type="System.Web.XmlSiteMapProvider" siteMapFile="STA.sitemap" securityTrimmingEnabled="true"/>
    <add name="TASiteMap" type="System.Web.XmlSiteMapProvider" siteMapFile="TA.sitemap" securityTrimmingEnabled="true"/>
  </providers>
</siteMap>
然后在您的代码隐藏中,您可以动态地将您的SiteMapDataSource(绑定到您的菜单)分配给您在web.config中指定的提供程序之一: 的.aspx
<asp:Menu ID="MenuLevel1" runat="server" Orientation="Horizontal" DataSourceID="SiteMapLevel1"
    MaximumDynamicDisplayLevels="0" IncludeStyleBlock="false">
</asp:Menu>                
<asp:SiteMapDataSource ID="SiteMapLevel1" runat="server" /> 
的.cs
SiteMapLevel1.SiteMapProvider = "TASiteMap";
    
Pauli的评论是我特殊要求的答案:   “你不应该切换/改变任何东西......而是你需要访问   RootNode一直都是这样的   
SiteMap.Providers[someProvider].RootNode
和someProvider应该   然后在运行时解决。“ 我没有意识到这是可能的,但对我来说是正确的解决方案。     

要回复问题请先登录注册