我正在使用没有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的初始化方式。它可能容易受到跨线程操作的影响。它可能会被双重初始化。
你对此有什么建议吗?
提前致谢。
答案 0 :(得分:0)
请查看this answer以获取有关使用区域设置MvcSiteMapProvider的帮助。必须使用正确的约定配置路由,否则它将无法正常工作。
如果您确定整个站点中只有1个节点没有设置父节点(或者已将其设置为null或空字符串)并且您使用的是[MvcSiteMapNode]属性,则可能是由于程序集被多次加载到AppDomain中。检查AppDomain.CurrentDomain.GetAssemblies()
方法,查看目标程序集(本例中为dllmain
和dll2
)是否多次出现在结果中。