2012-08-17 100 views
8

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

回答

5

首先,我建议你阅读这个维基页面: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; 
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 - 节点是在的SiteMapPath可见,* - 这是所有其他控件看不见!)

如:

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

其他方案可供选择:

类型 .......................... 它影响什么
CanonicalHelper ....... Canonical HTML Helper
MenuHelper ..............菜单HTML助手
MetaRobotsHelper .... Meta机器人HTML助手
SiteMapHelper .......... SiteMap HTML助手
SiteMapPathHelper ...的HTML的SiteMapPath助手
SiteMapTitleHelper ...标题HTML辅助
XmlSiteMapResult ....的/sitemap.xml端点

+0

这是最简单的解决方案的站点地图XML输出,因为它不需要额外的代码。 – 2015-01-09 11:26:35