MVC SiteMap从menuhelper隐藏节点,但在sitepathhelper中显示(breadcrumbs)

时间:2013-03-03 13:45:46

标签: c# asp.net-mvc breadcrumbs mvcsitemapprovider sitemapprovider

我正在尝试从我的网站菜单中隐藏节点,但是在我的面包屑中显示它

我在这里关注教程:https://github.com/maartenba/MvcSiteMapProvider/wiki/Advanced-Node-Visibility

<mvcSiteMapNode title="Create Customer" controller="Customer" action="Create" area="Home" clickable="false" visibility="SiteMapPathHelper,!*"/>  

以上似乎不起作用。它会显示在我的网站菜单和面包屑中。

3 个答案:

答案 0 :(得分:3)

我们创建了一个OnlyBreadCrumbMVCSiteMapNodeAttribute。我们装饰任何我们想要属性的代码

public class OnlyBreadCrumbMvcSiteMapNodeAttribute : MvcSiteMapNodeAttribute
{
    public OnlyBreadCrumbMvcSiteMapNodeAttribute(string title, string parentKey)
    {
        Title = title;
        ParentKey = parentKey;
        VisibilityProvider = typeof(BreadCrumbOnlyVisibilityProvider).AssemblyQualifiedName;
    }
    public OnlyBreadCrumbMvcSiteMapNodeAttribute(string title, string parentKey, string key)
    {
        Title = title;
        Key = key;
        ParentKey = parentKey;
        VisibilityProvider = typeof(BreadCrumbOnlyVisibilityProvider).AssemblyQualifiedName;
    }
}

还有一个可见的提供者

public class BreadCrumbOnlyVisibilityProvider : ISiteMapNodeVisibilityProvider
{
    public bool IsVisible(SiteMapNode node, HttpContext context, IDictionary<string, object> sourceMetadata)
    {
        if (sourceMetadata["HtmlHelper"] == null || (string)sourceMetadata["HtmlHelper"] == "MvcSiteMapProvider.Web.Html.SiteMapPathHelper")
        {
            return true;
        }
        return false;
    }
}

使用

    [OnlyBreadCrumbMvcSiteMapNode("Upload Documents", "AssetDocuments")]
    public virtual ActionResult FileUpload(int assetId)

上传文件将是面包屑标题。 AssetDocuments是父键

如果传递第3个参数,则设置面包屑节点本身的键

答案 1 :(得分:3)

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

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 ....元机器人HTML助手
SiteMapHelper .......... SiteMap HTML Helper
SiteMapPathHelper ... SiteMapPath HTML Helper
SiteMapTitleHelper ...标题HTML助手
XmlSiteMapResult ....站点映射/sitemap.xml端点的XML输出

答案 2 :(得分:0)

将此添加到您的web.config

<appSettings>
  <add key="MvcSiteMapProvider_DefaultSiteMapNodeVisibiltyProvider" value="MvcSiteMapProvider.FilteredSiteMapNodeVisibilityProvider, MvcSiteMapProvider"/>
<appSettings>