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