car*_*ac7 8 asp.net-mvc visibility menu nodes mvcsitemapprovider
我在一个项目中使用ASP.NET MVC SiteMap提供程序,它运行良好.我正在努力想弄清楚如何隐藏菜单项.我想隐藏在全局导航中显示的菜单项是我的"站点地图"页面.现在我知道VisibilityProvider在mvcSiteMapNode上有一些可用的东西 - 但我似乎无法弄清楚如何让它工作.
从我在这里的答案中解释如何隐藏可用的节点和选项.
您应该使用本指南来了解如何隐藏节点
您可以从上面的链接设置一些设置:
<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>
Run Code Online (Sandbox Code Playgroud)
添加应用程序设置后,将以下内容添加到要在面包屑中查看但不在菜单中看到的任何节点:
visibility="SiteMapPathHelper,!*" (SiteMapPathHelper - 该节点在sitemappath中可见,!* - 它对所有其他控件都不可见)
例如:
<mvcSiteMapNode title="Administration" area="Admin" clickable="false" visibility="SiteMapPathHelper,!*" />
Run Code Online (Sandbox Code Playgroud)
其他选择:
类型 .......................... 它影响
CanonicalHelper ....... Canonical HTML Helper
MenuHelper ....... .......菜单HTML帮助程序
MetaRobotsHelper ....元机器人HTML帮助程序
SiteMapHelper .......... SiteMap HTML帮助程序
SiteMapPathHelper ... SiteMapPath HTML帮助程序
SiteMapTitleHelper ...标题HTML Helper
XmlSiteMapResult ....站点映射/sitemap.xml端点的XML输出
首先,我建议您阅读此Wiki页面:创建自定义SiteMapNodeVisibilityProvider.然后,对于指向"站点地图"页面的特定节点,请按以下方式声明:
<mvcSiteMapNode title="Site Map" controller="Home" action="Map" visibility="false" />
Run Code Online (Sandbox Code Playgroud)
现在,在实现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;
Run Code Online (Sandbox Code Playgroud)