我在一个项目中使用 ASP.NET MVC SiteMap 提供程序,它运行良好。但是,我很难弄清楚如何隐藏菜单项。我想在全局导航中隐藏的菜单项是我的“站点地图”页面。现在我知道在 mvcSiteMapNode 上有一个VisibilityProvider
可供我使用的东西 - 但我似乎无法弄清楚如何让它工作。
2 回答
取自我在这里的回答,解释如何隐藏可用的节点和选项。
https://stackoverflow.com/a/27095721/853295
您应该使用本指南了解如何隐藏节点
您可以从上面的链接中设置一些设置:
<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 输出
首先,我建议您阅读这个 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;