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