【发布时间】:2015-05-16 01:44:36
【问题描述】:
当我有:
var node = SiteMap.Provider.FindSiteMapNode(HttpContext.Current);
并且我所在的页面被站点角色排除在外,FindSiteMapNode 正在返回我所在节点最近的可见父节点。我预计它会返回null。
如何测试正在访问的页面是否在站点地图中可见?
【问题讨论】:
当我有:
var node = SiteMap.Provider.FindSiteMapNode(HttpContext.Current);
并且我所在的页面被站点角色排除在外,FindSiteMapNode 正在返回我所在节点最近的可见父节点。我预计它会返回null。
如何测试正在访问的页面是否在站点地图中可见?
【问题讨论】:
如何测试正在访问的页面是否在 SiteMap 中可见?
您可以使用SiteMap HTML 帮助程序查看站点地图中当前可见的所有节点。
@Html.MvcSiteMap().SiteMap()
线
var node = SiteMap.Provider.FindSiteMapNode(HttpContext.Current);
仅适用于 MvcSiteMapProvider v3.x 或更早版本。这是访问 ASP.NET SiteMap 提供程序模型,v4.x 不再基于该模型。正如documentation 中所指出的,v4.x 的正确语法是
var node = MvcSiteMapProvider.SiteMaps.Current.FindSiteMapNodeFromCurrentContext();
MvcSiteMapProvider FindSiteMapNode 返回父节点而不是当前节点
至于这个问题,您显然配置了多个节点来匹配路由(无论它是什么)。 first match always wins。
请注意,如果您使用的是 v3.x 或之前的版本,它会尝试执行“部分匹配”,这可能是导致此问题的原因。它还被设置为在未找到匹配项时始终返回根节点而不是 null。这两个问题都已在 v4.x 的更高版本中得到修复。
【讨论】: