【发布时间】:2013-02-25 17:00:52
【问题描述】:
MvcSiteMapProvider 项目有问题:我的站点地图总是空的。
我已经设置了Mvc.sitemap,设置了web.config的条目。通过DefaultSiteMapProvider 进行调试显示 .sitemap 文件已被读取并正确处理。但是,返回的站点地图基本上是空的:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>
http://localhost:59933/
</loc>
</url>
</urlset>
然而,在单步执行代码时会发生一件奇怪的事情。我单步执行 DefaultSiteMapProvider 并观察 root 变量中的根节点。在设置isBuildingSiteMap = false 时,在方法结束时根节点将重置为空节点。我不知道这会如何影响根节点的设置,但它在我的项目中始终如一地发生。
感谢任何帮助如何防止root 节点被覆盖。 :)
来自 DefaultSiteMapProvider 的注释摘录,靠近 BuildSiteMap 方法的最后部分(ll. 660 ff.):
HttpContext.Current.Cache.Add(/*...*/); // At this point the root node is correct
isBuildingSiteMap = false; // after executing this line, `root` gets reset to an empty node.
siteMapXml = null;
Mvc.sitemap:
<mvcSiteMap [...]>
<mvcSiteMapNode title="Home" controller="Home" action="Index">
<mvcSiteMapNode title="Test" controller="Listing" action="Index">
</mvcSiteMapNode>
</mvcSiteMap>
web.config 条目直接来自 documentation page,仅针对站点地图名称进行了调整。
【问题讨论】:
-
您是否在问为什么列表控制器没有出现在站点地图中?
-
基本上,是的;但在我的实际项目中,我有几个动态节点提供程序,所有这些节点都不会出现在生成的站点地图中,即使提供程序已执行并正确组装节点。在调试器中单步执行代码时,由于某种原因,根节点在
DefaultSiteMapProvider中提到的行处被完全删除。 -
你能发布动态节点提供者吗?
-
我将三个提供程序连同完整的、实际的 Mvc.sitemap 一起放入了这个要点(尽管对于上述站点地图,它以相同的方式失败,没有运行动态提供程序)。 gist.github.com/anonymous/5047048
标签: c# asp.net-mvc mvcsitemapprovider