ОБНОВЛЕНИЕ: несмотря на весь приведенный ниже текст, проблема была довольно небольшой - неправильное имя сборки в параметре includeAssembliesForScan в конфигурации siteMap. Он не должен содержать часть ".dll".
У меня есть версия 3.2.2.0 MvcSiteMapProvider.
Как описано здесь, я использую атрибуты для определения узлов карты сайта. в коде. Но атрибутированные действия не генерируются как узлы. Генерируются только те узлы, которые явно определены в карте сайта.
Это мой код:
карта сайта:
<?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>