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

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

我该怎么做呢?

最佳答案

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

使用的名称是类型的FullName(不含程序集名称的完全限定名称)。

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" })

09-11 19:04