2012-04-25 36 views
0

更新站點地圖結點:儘管下面的所有文字,問題是相當小 - 在地圖的配置參數includeAssembliesForScan錯誤的程序集名稱。它不應該包含「.dll」部分。ASP.NET MVC網站地圖提供商不會產生從屬性

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

所以,這兩個動作不會成爲站點地圖中的節點。換句話說,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認爲它將在Area內導致Url生成錯誤的原因。 – hydr 2012-05-04 14:51:17

+0

我有相同的名稱空間名稱和程序集名稱。但是mvcSiteMapNode標題的資源位於Resources命名空間中(實際上它是App_GlobalResources項目文件夾)。 – user808128 2012-05-16 12:09:10

+0

我的ASP.NET MVC應用程序中沒有區域。 – user808128 2012-05-16 12:15:18

回答

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

我有MvcSiteMapProvider v。3.2.2.0。除了程序集名稱(我更新我的問題以便將我的siteMap配置存在)之外,我還擁有與您的web.config相同的「siteMap」部分。我的控制器駐留在與我的站點相同的程序集中。但是,在mvc.sitemap文件中沒有明確定義的點也不會生成爲點。換句話說,MvcSiteMapNodeAttribute屬性不起作用。我嘗試將MvcSiteMapProvider更新到v.4 - 也許它會起作用。 – user808128 2013-11-28 12:52:00

+1

您的程序集名稱不應包含「.dll」文件的內容。它必須與「應用程序」選項卡上項目屬性中「組件名稱」字段的組態相同。 – NightOwl888 2013-11-28 14:10:19

+0

我修復了程序集名稱。但是還會出現另一個問題 - 至少根節點必須在mvc.sitemap文件中定義,因爲沒有ParentKey參數的attribute操作方法被認爲是根節點。如何定義只有屬性MvcSiteMapNodeAttribute的根節點 - 哪些參數是最低要求? – user808128 2013-11-29 10:00:45