2012-04-25 40 views
0

UPDATEからサイトマップノードを生成しません:以下のすべてのテキストにもかかわらず、問題はかなり小さかった - サイトマップの構成でincludeAssembliesForScanパラメータで間違ったアセンブリ名。 「.dll」部分は含めないでください。ASP.NET MVCサイトマッププロバイダは属性

私には、3.2.2.0のMvcSiteMapProviderがあります。

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(); 
} 

ので、これら二つの動作はしませんサイトマップのノードになります。つまり、MvcSiteMapNodeAttribute属性が機能しませんでした。どうして?

web.configファイルのマイマップの一部:。

<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> 
+0

私は同様の問題を抱えていました。標準名前空間とアセンブリ名がどのように見えるか教えてください。 私のアプリケーションでは一致しなかったため、MvcSiteMapが誤ったURL生成を引き起こしたエリア内にあると思うのはその理由でした。 – hydr

+0

私は同じ名前空間名とアセンブリ名を持っています。しかし、mvcSiteMapNodeタイトルのリソースはResources名前空間にあります(実際はApp_GlobalResourcesプロジェクトフォルダです)。 – user808128

+0

そして、私はASP.NET MVCアプリケーションに領域がありません。 – user808128

答えて

1

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

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> 
+0

私はvv 3.2.2.0のMvcSiteMapProviderを持っています。私はまたアセンブリ名以外のweb.configと同じ "siteMap"部分を持っています(私の質問を更新して私のsiteMap設定をそこに置きます)。私のコントローラは私のサイトと同じアセンブリに存在します。しかし、mvc.sitemapファイルで明示的に定義されていないノードは、nodsとして生成されません。つまり、MvcSiteMapNodeAttribute属性が機能しませんでした。 MvcSiteMapProviderをv4に更新しようとします。おそらくそれはうまくいくでしょう。 – user808128

+1

アセンブリ名にexension ".dll"を含めないでください。アプリケーションタブのプロジェクトプロパティで「アセンブリ名」フィールドとして構成されているものと同じでなければなりません。 – NightOwl888

+0

アセンブリ名を修正しました。しかし、別の問題が現れます。少なくとも、属性のParentKeyパラメータがルートノードとして認識されないため、属性アクションメソッドがmvc.sitemapファイルに定義されている必要があります。属性MvcSiteMapNodeAttributeのみでルートノードを定義する方法 - 最小限のパラメータは必要ですか? – user808128

関連する問題