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

car*_*ac7 8 asp.net-mvc visibility menu nodes mvcsitemapprovider

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

gar*_*thb 6

从我在这里的答案中解释如何隐藏可用的节点和选项.

/sf/answers/1896700501/

您应该使用本指南来了解如何隐藏节点

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>
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输出


Len*_*rri 5

首先,我建议您阅读此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)