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 から完全に削除できます。

1 つのアプリケーションで 2 つのサイトマップの要件を処理するには、依存性注入コンテナーを使用し、1 つまたは 2 つのカスタム クラスを実装して、受信 HTTP 要求を特定の SiteMap インスタンスにマップする必要があります。

DI 部分は、MvcSiteMapProvider.MVC[x].DI.[ContainerName] パッケージのいずれかをインストールすることで処理できます。

ISiteMapCacheKeyGenerator は、HTTP 要求に基づいて "現在の" SiteMap の名前を提供し、ISiteMapCacheKeyToBuilderSetMapper は MvcSiteMapProvider に使用するビルダー (XML ファイルまたはその他のソース用に構成できます) を通知します。

これを行う方法の完全な例については、1 つのアプリケーションで複数のサイトマップを参照してください。

于 2013-09-27T09:56:55.103 に答える