我有一个从 web.sitemap 文件构建的自定义菜单导航,第一行类似于:
SiteMapNodeCollection topLevelNodes = SiteMap.RootNode.ChildNodes;
这有效 - 它从 web.sitemap 文件中获取所有顶级节点,并允许我查看每个 SiteMapNode 并执行操作。
但是,现在我希望能够创建多个 web.sitemap 文件,然后以编程方式确定要使用哪个 web.sitemap 文件,但我似乎不知道如何执行此操作。我假设我可以创建一个自定义 SiteMapProvider 来执行逻辑来确定要加载哪个 web.sitemap 文件,或者我有多个提供程序,每个提供程序都将 SiteMapFile 属性设置为特定的 *.sitemap 文件,然后切换在我访问 SiteMap.RootNode 之前以编程方式提供提供程序。
我认为拥有一个自定义提供程序可能更容易,然后覆盖它查找实际物理站点地图文件位置的部分,但我不清楚如何做到这一点
我在谷歌上搜索了很多,但大多数答案似乎都是关于标准站点地图路径控件等,以及如何设置 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(绑定(bind)到您的菜单)动态分配给您在 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";
关于asp.net - SiteMap 更改 SiteMapProvider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4797572/