asp.net - SiteMap 更改 SiteMapProvider?

标签 asp.net custom-controls sitemap sitemapprovider web.sitemap

我有一个从 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/

相关文章:

c# - 在 asp.net c# 中使用 SQL Server 存储过程输出

c# - 内联代码标签在某些情况下呈现为文本

delphi - 具有非客户区的自定义控件 - 最初不计算

ios - swift UITextFieldDelegate 扩展

seo - 对 sitemap_index.xml 的困惑

c# - 从客户端检测到具有潜在危险的 Request.Form 值

c# - 如何创建带圆角的用户控件?

django - 如何将标签网址添加到 sitemap.xml?

seo - sitemap.xml 中的多个项目类别

asp.net - 重定向到登录页面 asp.net