Skip to main content
 首页 » 编程设计

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

2024年01月13日30artech

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

我正在尝试使用 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" })