使用带有2个站点地图的asp.net MVCSiteMapProvider v4

时间:2013-09-27 04:29:04

标签: asp.net-mvc-4 mvcsitemapprovider

您好我想使用带有2个不同站点地图的asp.net MVCSiteMapProvider v4,一个用于主站点,另一个用于管理区域。我做了一些搜索,我发现你需要在web.config上插入它:

 <siteMap defaultProvider="AppSiteMapProvider" enabled="true">
  <providers>
    <clear />
    <add name="AppSiteMapProvider" type="MvcSiteMapProvider.DefaultSiteMapProvider,
    MvcSiteMapProvider" siteMapFile="~/Mvc2.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="AdminSiteMapProvider" type="MvcSiteMapProvider.DefaultSiteMapProvider,
    MvcSiteMapProvider" siteMapFile="~/Areas/Admin/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" />
  </providers>
</siteMap>

然后使用

@Html.MvcSiteMap("AdminSiteMapProvider").Menu()

但它不起作用。 有人有同样的问题??????? 顺便说一下错误是:

Could not find file 'P:\MVCTest\MvcSite1\MvcSite1\Mvc.sitemap'. 

就像他们只是忽略了web.config

1 个答案:

答案 0 :(得分:1)

使用v4时,这些设置 会被忽略。 MvcSiteMapProvider不再使用Microsoft的站点地图提供程序模型,<siteMap>部分可以完全从web.config中删除。

要在一个应用程序中处理2个站点地图的要求,您需要使用依赖项注入容器并实现1或2个自定义类,以将传入的HTTP请求映射到特定的SiteMap实例。

可以通过安装MvcSiteMapProvider.MVC [x] .DI。[ContainerName]包中的一个来处理DI部分。

ISiteMapCacheKeyGenerator根据HTTP请求提供“当前”SiteMap的名称,ISiteMapCacheKeyToBuilderSetMapper告诉MvcSiteMapProvider使用哪个构建器(可以为XML文件或其他源配置)。

有关如何完成此操作的完整示例,请参阅Multiple SiteMaps in One Application