更新: 以下のすべてのテキストにもかかわらず、問題はかなり小さいものでした-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>