我有一个我不想显示在菜单中的页面。但是,当我在页面上时,我确实希望它显示在面包屑中。
我正在尝试使用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" })