9

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

4

2 回答 2

6

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

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....... .......Menu HTML Helper
MetaRobotsHelper.... Meta Robots HTML Helper
SiteMapHelper..........SiteMap HTML Helper
SiteMapPathHelper...SiteMapPath HTML Helper
SiteMapTitleHelper...标题HTML Helper
XmlSiteMapResult.... /sitemap.xml 端点的站点地图 XML 输出

于 2014-11-23T23:34:53.183 回答
5

首先,我建议您阅读这个 wiki 页面:创建自定义 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;
于 2012-09-23T10:48:45.863 回答