2013-09-27 25 views
0

您好我想使用asp.net MVCSiteMapProvider v4與2個不同的站點地圖,一個用於主站點,一個用於管理區域。我已經做了一些搜索,我發現,你需要插入在web.config中:使用asp.net MVCSiteMapProvider v4與2站點地圖

<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

這些設置使用V4時忽略。 MvcSiteMapProvider不再使用Microsoft的站點地圖提供者模型,並且<siteMap>部分可以完全從web.config中移除。

要在一個應用程序中處理2個站點地圖的需求,您需要使用依賴注入容器並實現1或2個自定義類來將傳入的HTTP請求映射到特定的SiteMap實例。

DI部分可以通過安裝MvcSiteMapProvider.MVC [x] .DI。[ContainerName]包中的一個來處理。

ISiteMapCacheKeyGenerator根據HTTP請求提供「當前」SiteMap的名稱,ISiteMapCacheKeyToBuilderSetMapper告訴MvcSiteMapProvider要使用哪個構建器(可以爲XML文件或其他源配置該構造器)。

請參閱Multiple SiteMaps in One Application瞭解如何完成此操作的完整示例。