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 将节点分成不同的组,这些组一起可见。
- Security Trimming
- Visibility Providers
- 自定义 HTML 助手输出(在
/Views/Shared/DisplayTemplates/
文件夹中)
- 滚动你自己的 HTML 助手(查看演示 here)
在 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.
<providers>
部分
至于使用多个SiteMap,这是高级场景,需要外部DI容器来做,流程outlined here。
如果您尚未在应用程序中使用 DI,升级到外部 DI 就像安装 MvcSiteMapProvider.MVC5.DI.<Container Name>
NuGet 包之一一样简单。如果您在应用程序中使用 DI,则需要安装 MvcSiteMapProvider.MVC5.DI.<Container Name>.Modules
之一,然后按照随其安装的自述文件中的配置说明进行操作。
请注意,有许多更简单的替代方法可以使用多个 SiteMap 将节点分成不同的组,这些组一起可见。
- Security Trimming
- Visibility Providers
- 自定义 HTML 助手输出(在
/Views/Shared/DisplayTemplates/
文件夹中) - 滚动你自己的 HTML 助手(查看演示 here)