MVC 5,应用程序中的两个 SiteMap Provider

MVC 5, Two SiteMap Providers in a app

在 mvc 5 应用程序中有两个站点地图,但只有默认的 (mvc.sitemap) 在工作,在 web.config 中添加了新的提供者。

尝试使用新文件作为默认文件,但应用程序仍在使用默认文件,如果我完全删除该文件,则会出现错误(在视图中,我从站点地图中检索了页面标题,所以Pagetitle 属性显示错误,因为没有站点地图)? 有什么建议么?

未检测到客户 SiteMap

 <providers>
    <clear />
    <add name="MvcSiteMapProvider" type="MvcSiteMapProvider.DefaultSiteMapProvider, MvcSiteMapProvider" siteMapFile="~/Mvc.Sitemap" securityTrimmingEnabled="true" cacheDuration="5" enableLocalization="true" scanAssembliesForSiteMapNodes="true" includeAssembliesForScan="" excludeAssembliesForScan="" attributesToIgnore="visibility" nodeKeyGenerator="MvcSiteMapProvider.DefaultNodeKeyGenerator, MvcSiteMapProvider" controllerTypeResolver="MvcSiteMapProvider.DefaultControllerTypeResolver, MvcSiteMapProvider" actionMethodParameterResolver="MvcSiteMapProvider.DefaultActionMethodParameterResolver, MvcSiteMapProvider" aclModule="MvcSiteMapProvider.DefaultAclModule, MvcSiteMapProvider" siteMapNodeUrlResolver="MvcSiteMapProvider.DefaultSiteMapNodeUrlResolver, MvcSiteMapProvider" siteMapNodeVisibilityProvider="MvcSiteMapProvider.DefaultSiteMapNodeVisibilityProvider, MvcSiteMapProvider" siteMapProviderEventHandler="MvcSiteMapProvider.DefaultSiteMapProviderEventHandler, MvcSiteMapProvider" />
    <add name="CustomerSiteMapProvider" type="MvcSiteMapProvider.DefaultSiteMapProvider, MvcSiteMapProvider" siteMapFile="~/Customer.Sitemap" securityTrimmingEnabled="true" cacheDuration="5" enableLocalization="true" scanAssembliesForSiteMapNodes="true" includeAssembliesForScan="" excludeAssembliesForScan="" attributesToIgnore="visibility" nodeKeyGenerator="MvcSiteMapProvider.DefaultNodeKeyGenerator, MvcSiteMapProvider" controllerTypeResolver="MvcSiteMapProvider.DefaultControllerTypeResolver, MvcSiteMapProvider" actionMethodParameterResolver="MvcSiteMapProvider.DefaultActionMethodParameterResolver, MvcSiteMapProvider" aclModule="MvcSiteMapProvider.DefaultAclModule, MvcSiteMapProvider" siteMapNodeUrlResolver="MvcSiteMapProvider.DefaultSiteMapNodeUrlResolver, MvcSiteMapProvider" siteMapNodeVisibilityProvider="MvcSiteMapProvider.DefaultSiteMapNodeVisibilityProvider, MvcSiteMapProvider" siteMapProviderEventHandler="MvcSiteMapProvider.DefaultSiteMapProviderEventHandler, MvcSiteMapProvider" />
  </providers>

您上面显示的配置适用于 MvcSiteMapProvider v3,但 v3 与 MVC 5 不兼容。

MvcSiteMapProvider v4 不是基于微软的 SiteMapProvider 模型,并且在 NuGet 包安装的内容之上根本不需要任何配置。您应该按照 upgrading from v3 to v4 and read the configuration documentation.

中的规定从 web.config 中完全删除 <providers> 部分

至于使用多个SiteMap,这是高级场景,需要外部DI容器来做,流程outlined here

如果您尚未在应用程序中使用 DI,升级到外部 DI 就像安装 MvcSiteMapProvider.MVC5.DI.<Container Name> NuGet 包之一一样简单。如果您在应用程序中使用 DI,则需要安装 MvcSiteMapProvider.MVC5.DI.<Container Name>.Modules 之一,然后按照随其安装的自述文件中的配置说明进行操作。

请注意,有许多更简单的替代方法可以使用多个 SiteMap 将节点分成不同的组,这些组一起可见。