【问题标题】:MvcSiteMapProvider FindSiteMapNode returning parent node instead of current nodeMvcSiteMapProvider FindSiteMapNode 返回父节点而不是当前节点
【发布时间】:2015-05-16 01:44:36
【问题描述】:

当我有:

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

并且我所在的页面被站点角色排除在外,FindSiteMapNode 正在返回我所在节点最近的可见父节点。我预计它会返回null。

如何测试正在访问的页面是否在站点地图中可见?

【问题讨论】:

    标签: mvcsitemapprovider


    【解决方案1】:

    如何测试正在访问的页面是否在 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 的更高版本中得到修复。

    【讨论】:

    • 这听起来不错...我得确定我有哪个版本!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    相关资源
    最近更新 更多