c# - 如何从菜单中隐藏 MvcSiteMapNode 而不是面包屑?

标签 c# asp.net-mvc mvcsitemapprovider

我有一个我不想希望显示在菜单中的页面。但是,当我在页面上时,我确实希望它显示在面包屑中。

我正在尝试使用 ISiteMapNodeVisibilityProvider 类来执行此操作,但无法弄清楚如何确定提供的 SiteMapNode 参数是否在菜单或面包屑中。

我该怎么做?

最佳答案

您可以通过检查 sourceMetadata 参数的“HtmlHelper”元素来测试哪个 HTML 帮助器正在调用可见性提供程序。此参数会自动传递到可见性提供程序。

使用的名称是类型的全名(没有程序集名称的完全限定名称)。

public class MyNodeNotOnMenuVisibilityProvider
    : SiteMapNodeVisibilityProviderBase
{
    public override bool IsVisible(ISiteMapNode node, IDictionary<string, object> sourceMetadata)
    {
        if (sourceMetadata.ContainsKey("HtmlHelper") && sourceMetadata["HtmlHelper"].ToString().Equals("MvcSiteMapProvider.Web.Html.MenuHelper"))
        {
            if (node.Key == "MyNode")
            {
                return false;
            }
        }
        return true;
    }
}

在 v4 中,您还可以使用 sourceMetadata 通过任何 HTML 帮助程序传递自定义信息,然后您还可以在自定义可见性提供程序中测试自定义信息。

@Html.MvcSiteMap().Menu(new { myInfo = "Something" })

关于c# - 如何从菜单中隐藏 MvcSiteMapNode 而不是面包屑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17865100/

相关文章:

c# - 创建Excel文件并保存时大小加倍

asp.net - MvcSiteMapProvider 包含额外的路由值

asp.net-mvc - MvcSiteMapProvider 导致 MVC4 网站出现授权问题

c# - 添加多个 css 类 @Html.LabelFor

c# - Y型任务执行

c# - 在 C# 中将字符串中的多个字符替换为多个值

asp.net-mvc - 在 ASP.NET MVC 3 应用程序的类库中引用 Ninject

c# - 您可以使用命名的 JSON 属性将复杂对象传递给 C# Controller 吗?

jquery - MVC 3 : ActionFilterAttribute and OnActionExecuting don't fire

model-view-controller - MVCSiteMapProvider 不显示 SiteMapPath