【问题标题】:Change MVCSiteMapProvider Breadcrumb Depth更改 MVSiteMapProvider 面包屑深度
【发布时间】:2014-10-15 09:40:45
【问题描述】:

我正在处理一个使用 MVCSiteMapProvider 和动态节点设置了面包屑的页面。 GetDynamicNodeCollection 方法似乎只为面包屑设置了直接父级,因此面包屑只会显示两层深度。也就是说,如果您导航到层次结构中的第三级或第四级,例如:

(首页 > 1级 > 2级 > 3级 > 4级)

第一两级被删除,只剩下:

(首页 > 3级 > 4级)

但是,我不确定如何更新 GetDynamicNodeCollection 以允许正确显示整个面包屑路径。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 mvcsitemapprovider


    【解决方案1】:

    选项 #1

    使用FilteredSiteMapNodeVisibilityProvider 对 SiteMapPath 帮助器隐藏级别 1 和级别 2 的节点。

    public class MyDynamicNodeProvider
        : DynamicNodeProviderBase
    {
        public override IEnumerable<DynamicNode> GetDynamicNodeCollection(ISiteMapNode node)
        {
            // Level 1
            yield return this.MakeInvisibleOnSiteMapPath(
                new DynamicNode() 
                { 
                    Key = "Level1Key",
                    Title = "Level 1",
                    Controller = "Home", 
                    Action = "Level1"
                });
    
    
            // Level 2
            yield return this.MakeInvisibleOnSiteMapPath(
                new DynamicNode()
                {
                    Key = "Level2Key",
                    ParentKey = "Level1Key",
                    Title = "Level2",
                    Controller = "Home",
                    Action = "Level2"
                });
    
            // Level 3
            yield return new DynamicNode()
                {
                    Key = "Level3Key",
                    ParentKey = "Level2Key",
                    Title = "Level3",
                    Controller = "Home",
                    Action = "Level3"
                };
        }
    
        private DynamicNode MakeInvisibleOnSiteMapPath(DynamicNode dynamicNode)
        {
            // Setup visibility
            dynamicNode.VisibilityProvider = "MvcSiteMapProvider.FilteredSiteMapNodeVisibilityProvider, MvcSiteMapProvider";
            dynamicNode.Attributes.Add("visibility", "!SiteMapPathHelper");
    
            return dynamicNode;
        }
    }
    

    请注意,如果您在站点的不同区域有不同的可见性要求,您可以将其与 named HTML helpers 结合使用。如果您的要求更高,也可以build your own visibility provider

    选项 #2

    如果您的节点可见性根据上下文而变化,您可能会考虑使用building your own HTML helper 而不是使用内置的 SiteMapPath 帮助程序,因为它可能比使用可见性提供程序更容易做到。您只需要构建返回 HTML 字符串的 MvcSiteMapHtmlHelper 类的扩展方法。您可以通过对SiteMapPathHelper 进行逆向工程来获得一些灵感。我已经建立了一个demo project 来展示如何做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多