【问题标题】:ASP.NET MVC SiteMap provider -- How to 'hide' single items in the actual menuASP.NET MVC SiteMap 提供程序——如何在实际菜单中“隐藏”单个项目
【发布时间】:2023-03-23 03:25:01
【问题描述】:

我在一个项目中使用 ASP.NET MVC SiteMap 提供程序,它运行良好。但是,我很难弄清楚如何隐藏菜单项。我想在全局导航中隐藏的菜单项是我的“站点地图”页面。现在我知道在 mvcSiteMapNode 上有一个名为 VisibilityProvider 的东西可供我使用 - 但我似乎无法弄清楚如何让它工作。

【问题讨论】:

    标签: asp.net-mvc menu visibility nodes mvcsitemapprovider


    【解决方案1】:

    取自我在此处解释如何隐藏节点和可用选项的回答。

    https://stackoverflow.com/a/27095721/853295

    您应该使用本指南了解如何隐藏节点

    https://github.com/maartenba/MvcSiteMapProvider/wiki/Advanced-Node-Visibility-with-ISiteMapNodeVisibilityProvider

    您可以从上面的链接中设置一些设置:

    <appSettings>
        <!-- Visibility will not filter to children -->
        <add key="MvcSiteMapProvider_VisibilityAffectsDescendants" value="false"/>
        <!-- Set default visibility provider -->
        <add key="MvcSiteMapProvider_DefaultSiteMapNodeVisibiltyProvider" value="MvcSiteMapProvider.FilteredSiteMapNodeVisibilityProvider, MvcSiteMapProvider"/>
    </appSettings>
    

    添加应用设置后,将以下内容添加到您希望在面包屑中看到的任何节点,而不是菜单中:

    visibility="SiteMapPathHelper,!*"(SiteMapPathHelper - 节点在站点地图路径中可见,!* - 对于所有其他控件不可见)

    例如:

    <mvcSiteMapNode title="Administration" area="Admin" clickable="false" visibility="SiteMapPathHelper,!*" />
    

    其他可用选项:

    类型..........................它的影响
    CanonicalHelper.......Canonical HTML Helper
    MenuHelper........菜单 HTML 帮助器
    MetaRobotsHelper.... Meta Robots HTML 助手
    SiteMapHelper........SiteMap HTML Helper
    SiteMapPathHelper...SiteMapPath HTML 帮助器
    SiteMapTitleHelper...标题 HTML 帮助器
    XmlSiteMapResult.... /sitemap.xml 端点的站点地图 XML 输出

    【讨论】:

    • 这是最简单的解决方案,因为它不需要额外的代码。
    【解决方案2】:

    首先,我建议您阅读此 wiki 页面:Creating a Custom SiteMapNodeVisibilityProvider。然后对于指向您的站点地图页面的特定节点,以这种方式声明它:

    <mvcSiteMapNode title="Site Map" controller="Home" action="Map" visibility="false" />
    

    现在,当实现 IsVisible 方法(如上面链接的 wiki 页面所示)时,您可以这样做:

    string visibility = mvcNode["visibility"];
    
    // Is a visibility attribute specified?
    if (!string.IsNullOrEmpty(visibility))
    {
         isVisible = Convert.ToBoolean(mvcNode["visibility"]);
    
         if (!isVisible)
         {
              return false;
         }
    }
    
    return true;
    

    【讨论】:

      猜你喜欢
      • 2014-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 2015-11-17
      相关资源
      最近更新 更多