MvcSiteMapProvider FindSiteMapNode返回父节点而不是当前节点

时间:2015-05-16 01:44:36

标签: mvcsitemapprovider

当我有:

var node = SiteMap.Provider.FindSiteMapNode(HttpContext.Current);

并且我所在的页面被网站角色排除,FindSiteMapNode将返回我所在节点的最近可见父级。我希望它返回null

如何测试以查看正在访问的页面是否在SiteMap中可见?

1 个答案:

答案 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的更高版本中得到修复。