0

您好我想使用带有 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

4

1 回答 1

1

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

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

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

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

有关如何完成此操作的完整示例,请参阅一个应用程序中的多个站点地图。

于 2013-09-27T09:56:55.103 回答