0

更新: 尽管有以下所有文本,但问题相当小 - 站点地图配置中 includeAssembliesForScan 参数中的错误程序集名称。它不应包含“.dll”部分。

我有 v. 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>
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 回答