0

更新: 以下のすべてのテキストにもかかわらず、問題はかなり小さいものでした-siteMapの構成のincludeAssembliesForScanパラメーターのアセンブリ名が間違っていました。「.dll」の部分は含めないでください。

MvcSiteMapProvider の v. 3.2.2.0 があります。

hereで説明されているように、属性を使用してコードでサイトマップ ノードを定義します。ただし、属性付きアクションはノードとして生成されません。サイトマップで明示的に定義されているノードのみが生成されます。

それが私のコードです:

サイトマップ:

<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0"
            xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0 MvcSiteMapSchema.xsd"
            enableLocalization="true">

  <mvcSiteMapNode 
        title="$resources:Mvc.sitemap,MainMenuTop_Main" 
        controller="Home" 
        action="Index" 
        key="Home">    

    <mvcSiteMapNode 
            title="$resources:Mvc.sitemap,Account" 
            controller="Account" 
            action="LogOn" 
            clickable="false" 
            key="Account" /> 

  </mvcSiteMapNode>

</mvcSiteMap>

ホームコントローラー:

[HttpGet]
[MvcSiteMapProvider.MvcSiteMapNode(
    ParentKey = "Home", 
    Title = "$resources:Mvc.sitemap,MainMenuTop_About")]
public ActionResult About()
{
    return View();
}

アカウント コントローラー:

[HttpGet]
[MvcSiteMapProvider.MvcSiteMapNode(
    ParentKey = "Account", 
    Title = "$resources:Mvc.sitemap,Register")]
public ActionResult Register()
{
    return View();
}

したがって、これら 2 つのアクションはサイトマップのノードにはなりません。つまり、MvcSiteMapNodeAttribute 属性が機能しませんでした。なんで?

web.config の私の siteMap 部分:

<siteMap defaultProvider="MvcSiteMapProvider" enabled="true">
  <providers>
    <clear/>
    <add 
      name="MvcSiteMapProvider" 
      type="MvcSiteMapProvider.DefaultSiteMapProvider, MvcSiteMapProvider"
      siteMapFile="~/Mvc.Sitemap" 
      securityTrimmingEnabled="true" 
      cacheDuration="5" 
      enableLocalization="true" 
      scanAssembliesForSiteMapNodes="true" 
      includeAssembliesForScan="Site2.dll" 
      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>
4

1 に答える 1

1

構成内のサイトマップ ノードをスキャンするように指定したことを確認し、コントローラーが存在するアセンブリ名も提供する必要があります。アセンブリへのパスではなく、アセンブリの名前のみを指定する必要があることに注意してください。アセンブリは、プロジェクトから参照する必要があります。

v4 では、MVC プロジェクトは NuGet パッケージによって自動的に登録されるようになりましたが、コントローラーを別のアセンブリに配置する場合は、コントローラー アセンブリをリストに追加する必要があります (コンマで区切られます)。

MvcSiteMapProvider v4 (内部 DI):

<!-- web.config -->
<appSettings>
    <add key="MvcSiteMapProvider_ScanAssembliesForSiteMapNodes" value="true" />
    <add key="MvcSiteMapProvider_IncludeAssembliesForScan" value="MyAssemblyName" />
</appSettings>

MvcSiteMapProvider v4 (外部 DI):

// DI Module (file name varies depending on DI container)
string[] includeAssembliesForScan = new string[] { "MyAssemblyName" };

また、ReflectionSiteMapNodeProvider が構成に登録されていることを確認する必要もあります。

MvcSiteMapProvider v3:

<siteMap defaultProvider="MvcSiteMapProvider" enabled="true">
    <providers>
        <clear/>
        <add name="MvcSiteMapProvider"
             type="MvcSiteMapProvider.DefaultSiteMapProvider, MvcSiteMapProvider"
             siteMapFile="~/Mvc.Sitemap"
             securityTrimmingEnabled="true"
             cacheDuration="5"
             enableLocalization="true"
             scanAssembliesForSiteMapNodes="true"
             excludeAssembliesForScan=""
             includeAssembliesForScan="MyAssemblyName"
             attributesToIgnore="visibility"
             nodeKeyGenerator="MvcSiteMapProvider.DefaultNodeKeyGenerator, MvcSiteMapProvider"
             controllerTypeResolver="MvcSiteMapProvider.DefaultControllerTypeResolver, MvcSiteMapProvider" 
             actionMethodParameterResolver="MvcSiteMapProvider.DefaultActionMethodParameterResolver, MvcSiteMapProvider"
             aclModule="MvcSiteMapProvider.DefaultAclModule, MvcSiteMapProvider"
             routeMethod=""
             siteMapNodeUrlResolver="MvcSiteMapProvider.DefaultSiteMapNodeUrlResolver, MvcSiteMapProvider"
             siteMapNodeVisibilityProvider="MvcSiteMapProvider.DefaultSiteMapNodeVisibilityProvider, MvcSiteMapProvider"
             siteMapProviderEventHandler="MvcSiteMapProvider.DefaultSiteMapProviderEventHandler, MvcSiteMapProvider"/>
    </providers>
</siteMap>
于 2013-10-30T09:40:53.353 に答える