首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MvcSiteMapProvider MVC5自动生成站点地图

MvcSiteMapProvider MVC5自动生成站点地图
EN

Stack Overflow用户
提问于 2014-09-16 19:57:52
回答 1查看 5K关注 0票数 1

我试图自动生成站点地图,我使用以下Web.config:

代码语言:javascript
复制
<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>

主计长:

代码语言:javascript
复制
        [MvcSiteMapNode(Title = "Healthcare", Key = "Healthcare", ParentKey = "Home")]
        public ActionResult Healthcare (){..}

站点地图MVC.sitemap不更新?我把下面的一行改成了真

代码语言:javascript
复制
 <add key="MvcSiteMapProvider_ScanAssembliesForSiteMapNodes" value="true"/>

得到了这个错误:

代码语言:javascript
复制
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' 

会很感激你的建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-17 05:24:27

目前还没有自动生成SiteMap的内置方式。必须使用可用的节点定义选项(XML文件属性动态节点提供者或ISiteMapNodeProvider)手动配置每个节点。

这样做的主要原因是MVC没有预先定义的页面层次结构,只有控制器和操作,所以您最终会得到一个SiteMap对象,它有一个根节点,所有的页面都在它下面。也不可能自动检测操作参数的所有可能值。在大多数情况下,像这样扫描的SiteMap对于站点导航都是无用的。

尽管如此,如果您只想创建一个XML来提交到搜索引擎(无论如何都是平面的),或者您可以想出一种方法告诉MvcSiteMapProvider如何嵌套用于导航的键/父键关系,您可以实现ISiteMapNodeProvider并自己扫描控制器和操作(您可以使用ReflectionSiteMapNodeProvider作为指南)。

现有配置的一些指针:

在使用MvcSiteMapProvider_ScanAssembliesForSiteMapNodes属性时,需要将[MvcSiteMapNode]设置设置为true,因此您得到了正确的部分。

但是,您已经两次定义了MvcSiteMapProvider_IncludeAssembliesForScanMvcSiteMapProvider_UseExternalDIContainer设置。

该错误指示您的SiteMap中没有一个名为"Home“的节点,因此它不知道在层次结构中放置已配置的[MvcSiteMapNode]的位置。

因为您已经将MvcSiteMapProvider_EnableSiteMapFileMvcSiteMapProvider_IncludeRootNodeFromSiteMapFile设置为true,所以必须在Mvc.sitemap文件中定义根节点,并给它一个显式的键"Home“(如果这是您想要的话)。

代码语言:javascript
复制
<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]定义根节点(一个没有父键的节点)。

代码语言:javascript
复制
[MvcSiteMapNode(Title = "Home", Key = "Home")]
public ActionResult Index()
{
    return View();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25877384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档