我正在尝试自动生成站点地图,我正在使用以下内容 web.config中:
<appSettings>
<add key="MvcSiteMapProvider_IncludeAssembliesForScan" value="WebUI" />
<add key="MvcSiteMapProvider_ScanAssembliesForSiteMapNodes" value="true" />
<add key="MvcSiteMapProvider_UseExternalDIContainer" value="false" />
<add key="MvcSiteMapProvider_UseExternalDIContainer" value="false"/>
<add key="MvcSiteMapProvider_SiteMapFileName" value="~/Mvc.sitemap"/>
<add key="MvcSiteMapProvider_ExcludeAssembliesForScan" value=""/>
<add key="MvcSiteMapProvider_IncludeAssembliesForScan" value=""/>
<add key="MvcSiteMapProvider_AttributesToIgnore" value=""/>
<add key="MvcSiteMapProvider_CacheDuration" value="5"/>
<add key="MvcSiteMapProvider_ControllerTypeResolverAreaNamespacesToIgnore" value=""/>
<add key="MvcSiteMapProvider_DefaultSiteMapNodeVisibiltyProvider" value=""/>
<add key="MvcSiteMapProvider_VisibilityAffectsDescendants" value="true"/>
<add key="MvcSiteMapProvider_SecurityTrimmingEnabled" value="false"/>
<add key="MvcSiteMapProvider_EnableLocalization" value="true"/>
<add key="MvcSiteMapProvider_EnableSitemapsXml" value="true"/>
<add key="MvcSiteMapProvider_EnableResolvedUrlCaching" value="true"/>
<add key="MvcSiteMapProvider_EnableSiteMapFile" value="true"/>
<add key="MvcSiteMapProvider_IncludeRootNodeFromSiteMapFile" value="true"/>
<add key="MvcSiteMapProvider_EnableSiteMapFileNestedDynamicNodeRecursion" value="false"/>
<add key="MvcSiteMapProvider_UseTitleIfDescriptionNotProvided" value="true"/>
</appSettings>
控制器:
[MvcSiteMapNode(Title = "Healthcare", Key = "Healthcare", ParentKey = "Home")]
public ActionResult Healthcare (){..}
站点地图MVC.sitemap没有更新? 我将以下行更改为ture
<add key="MvcSiteMapProvider_ScanAssembliesForSiteMapNodes" value="true"/>
出现此错误:
Not all configured nodes could be paired with a parent node. Check your parent keys to ensure that a node with a corresponding key exists in the SiteMap. Note that the match is case sensitive.
SiteMapCacheKey: 'sitemap://localhost/'
Orphaned Nodes:
ParentKey: 'Home' | Controller: 'Home' | Action: 'Healthcare' | Area: '' | URL: '/Home/Healthcare' | Key: 'Healthcare' | Source: 'MvcSiteMapNodeAttribute'
非常感谢您的建议。
答案 0 :(得分:1)
目前没有自动生成SiteMap的内置方法。必须使用一个可用的节点定义选项(XML file,[MvcSiteMapNode]
attribute,dynamic node providers或ISiteMapNodeProvider)手动配置每个节点。
这样做的主要原因是MVC没有预定义的页面层次结构,只有控制器和操作,因此您最终会得到一个SiteMap对象,该对象具有一个根节点及其下面的所有页面。也不可能自动检测动作参数的所有可能值。在大多数情况下,扫描的SiteMap对于网站导航来说是无用的。
也就是说,如果您只想创建一个XML站点地图以提交给搜索引擎(无论如何都是平的),或者您可以想办法告诉MvcSiteMapProvider如何嵌套键/父键关系以进行导航,可以实现ISiteMapNodeProvider并自己扫描控制器和操作(您可以使用ReflectionSiteMapNodeProvider作为指南)。
现有配置的一些指针:
使用MvcSiteMapProvider_ScanAssembliesForSiteMapNodes
属性时,需要将[MvcSiteMapNode]
设置为true,以便您正确使用该部分。
但是,您已将MvcSiteMapProvider_IncludeAssembliesForScan
和MvcSiteMapProvider_UseExternalDIContainer
设置定义了两次。
该错误表明您的SiteMap中没有任何节点具有名为&#34; Home&#34;的密钥,因此它不知道层次结构中的哪个位置放置您已配置的[MvcSiteMapNode]
由于您已将MvcSiteMapProvider_EnableSiteMapFile
和MvcSiteMapProvider_IncludeRootNodeFromSiteMapFile
都设置为true,因此您必须在Mvc.sitemap文件中定义根节点,并为其指定一个明确的键&#34; Home&#34; (无论如何,这是你的意图)。
<mvcSiteMapNode title="Home" controller="Home" action="Index" key="Home">
<!-- If you have any additional nodes you want to define in XML, put them here -->
</mvcSiteMapNode>
如果您只想使用[MvcSiteMapNode]
配置节点(没有XML配置),则应将MvcSiteMapProvider_EnableSiteMapFile
设置为false并删除Mvc.sitemap和MvcSiteMapProvider.xsd文件。在这种情况下,您需要使用[MvcSiteMapNode]
定义根节点(没有父键的节点)。
[MvcSiteMapNode(Title = "Home", Key = "Home")]
public ActionResult Index()
{
return View();
}