1

我只是通过装饰器的方式使用没有 xml 的 MvcSiteMapNode。正如我在这篇文章中所说

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

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

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

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

SiteMapCacheKey: 'sitemap://localhost/'

不明确的根节点:

父键:'' | 控制器:“家”| 行动:“索引”| 区域:'管理员' | 网址:'/管理员' | 键:“根”| 来源:'MvcSiteMapNodeAttribute'

父键:'' | 控制器:“家”| 行动:“索引”| 区域:'管理员' | 网址:'/管理员' | 键:“根”| 来源:'MvcSiteMapNodeAttribute'

我的应用程序设置

<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" />

我认为这与站点地图的初始化方式有关。它可能容易受到跨线程操作的影响。它可能会被双重初始化。

你对此有什么建议吗?

提前致谢。

4

1 回答 1

0

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

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

于 2014-03-21T16:37:41.243 回答