【问题标题】:SiteMap change SiteMapProvider?SiteMap 更改 SiteMapProvider?
【发布时间】:2011-01-25 18:49:23
【问题描述】:

我有一个从 web.sitemap 文件构建的自定义菜单导航,第一行是这样的:

SiteMapNodeCollection topLevelNodes = SiteMap.RootNode.ChildNodes;

这行得通 - 它从 web.sitemap 文件中获取所有顶级节点,并允许我查看每个 SiteMapNode 并执行操作。

但是,现在我希望能够创建多个 web.sitemap 文件,然后以编程方式确定要使用哪个 web.sitemap 文件,但我似乎不知道如何执行此操作。我假设我可以创建一个自定义 SiteMapProvider 来执行逻辑以确定要加载哪个 web.sitemap 文件,或者我有多个提供程序,每个提供程序的 SiteMapFile 属性设置为特定的 *.sitemap 文件,然后切换在我访问 SiteMap.RootNode 之前以编程方式提供程序。

我认为拥有一个自定义提供程序可能更容易,然后覆盖它查找实际物理站点地图文件位置的部分,但我不清楚我将如何做到这一点

我搜索了很多,但大多数答案似乎是关于标准站点地图路径控件等,以及如何设置 SiteMapDataSource,我认为这与我的方法无关。

【问题讨论】:

  • 您不应该切换/更改任何东西...相反,您需要一直像这样访问 RootNode SiteMap.Providers[someProvider].RootNodesomeProvider 应该在运行时被解析。
  • 哦,没想到,我明天试试,听起来好像行。

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


【解决方案1】:

首先,您需要在 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";

【讨论】:

  • 如果我使用的是具有 SiteMapDataSource 属性的 Asp:menu 控件,这将是理想的,但这是不使用 asp:menu 控件的自定义代码。您的建议听起来像是我需要将我的代码转换为扩展 asp:menu 的自定义控件?我将首先在上面的评论中尝试 Pauli 的建议。
【解决方案2】:

Pauli 的评论是对我特殊要求的回答:

“你不应该切换/改变任何东西......相反,你需要访问 一直都是这样的RootNode SiteMap.Providers[someProvider].RootNode 和 someProvider 应该 然后在运行时解决。”

我没有意识到这是可能的,但对我来说是正确的解决方案。

【讨论】:

    猜你喜欢
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多