MvcSiteMapProvider出现奇怪的错误。它有些如何找到2个根节点

时间:2014-03-20 16:56:35

标签: mvcsitemapprovider asp.net-mvc-5.1

我正在使用没有xml的MvcSiteMapNode,只是装饰器的方式。正如我在post

中所说的那样

我确信我只有一个空根节点的节点。它总是有效,除了有些时候我得到这个错误。

  

在没有父键的情况下声明了多个节点。父母   必须为SiteMap中除1节点外的所有节点设置密钥。没有的节点   父密钥将被视为根节点。请注意,在定义时   在XML中的节点,XML文件必须包含根节点。

     

您可以通过设置来禁用XML配置   MvcSiteMapProvider_EnableSiteMapFile设置为“false”。为   在外部DI配置中,您可以通过删除来禁用XML解析   来自MvcSiteMapProvider DI模块的XmlSiteMapNodeProvider。

     

或者,您可以将MvcSiteMapProvider_IncludeRootNodeFromSiteMapFile设置为“false”   从XML文件中排除根节点,但包括所有   其他节点。对于外部DI配置,此设置可以是   在XmlSiteMapNodeProvider的构造函数中找到。

     

SiteMapCacheKey:'sitemap:// localhost /'

     

不明确的根节点:

     

ParentKey:''|控制器:'主页'|行动:'指数'|区域:'管理员'|   网址:'/ Admin'|关键:'root'|资料来源:'MvcSiteMapNodeAttribute'

     

ParentKey:''|控制器:'主页'|行动:'指数'|区域:'管理员'|   网址:'/ Admin'|关键:'root'|资料来源:'MvcSiteMapNodeAttribute'

我的App.Settings

<add key="MvcSiteMapProvider_EnableSiteMapFile" value="false" />
<add key="MvcSiteMapProvider_IncludeRootNodeFromSiteMapFile" value="false" />
<add key="MvcSiteMapProvider_IncludeAssembliesForScan" value="dllmain,dll2" />
<add key="MvcSiteMapProvider_UseExternalDIContainer" value="false" />
<add key="MvcSiteMapProvider_ScanAssembliesForSiteMapNodes" value="true" />

我认为必须这样做,以及sitemap的初始化方式。它可能容易受到跨线程操作的影响。它可能会被双重初始化。

你对此有什么建议吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

请查看this answer以获取有关使用区域设置MvcSiteMapProvider的帮助。必须使用正确的约定配置路由,否则它将无法正常工作。

如果您确定整个站点中只有1个节点没有设置父节点(或者已将其设置为null或空字符串)并且您使用的是[MvcSiteMapNode]属性,则可能是由于程序集被多次加载到AppDomain中。检查AppDomain.CurrentDomain.GetAssemblies()方法,查看目标程序集(本例中为dllmaindll2)是否多次出现在结果中。