当我有:
var node = SiteMap.Provider.FindSiteMapNode(HttpContext.Current);
并且我所在的页面被网站角色排除,FindSiteMapNode
将返回我所在节点的最近可见父级。我希望它返回null
。
如何测试以查看正在访问的页面是否在SiteMap中可见?
答案 0 :(得分:0)
如何测试以查看正在访问的页面是否在SiteMap中可见?
您可以使用SiteMap
HTML帮助程序查看SiteMap中所有当前可见的节点。
@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的更高版本中得到修复。