ASP.NET MVC SiteMap 提供程序——如何在实际菜单中“隐藏”单个项目

Posted

技术标签:

【中文标题】ASP.NET MVC SiteMap 提供程序——如何在实际菜单中“隐藏”单个项目【英文标题】:ASP.NET MVC SiteMap provider -- How to 'hide' single items in the actual menu 【发布时间】:2012-08-13 23:27:19 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

https://***.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;

【讨论】:

以上是关于ASP.NET MVC SiteMap 提供程序——如何在实际菜单中“隐藏”单个项目的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 和 ASP.NET 成员资格模板提供程序

ASP .NET MVC 虚拟路径提供程序

带有外部缓存提供程序的 ASP.NET MVC OutputCacheAttribute

是否可以在没有 web.sitemap 的情况下进行基于 ASP.NET 角色的表单身份验证和授权?

如何为 ASP.NET MVC 2 创建自定义成员资格提供程序?

ASP.NET MVC 如何创建自定义角色提供程序