4

我试图从我的站点菜单中隐藏一个节点,但在我的面包屑中显示它

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

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

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

4

3 回答 3

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 是父键

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

于 2013-03-07T10:39:27.790 回答
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 - 节点在站点地图路径中可见,!* - 它对所有其他控件不可见)

例如:

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

于 2014-11-23T23:31:53.700 回答
0

将此添加到您的 web.config

<appSettings>
  <add key="MvcSiteMapProvider_DefaultSiteMapNodeVisibiltyProvider" value="MvcSiteMapProvider.FilteredSiteMapNodeVisibilityProvider, MvcSiteMapProvider"/>
<appSettings>
于 2014-04-24T11:33:49.890 回答