Asp.net mvc 更改MVCSiteMapProvider面包屑深度
我正在处理一个使用MVCSiteMapProvider和动态节点设置面包屑的页面。GetDynamicNodeCollection方法似乎只为breadcrumbs设置直接父级,因此breadcrumbs将只显示两级深度。也就是说,如果您导航到层次结构中的第三或第四级,请说: (主页>级别1>级别2>级别3>级别4) 第一层或第二层被移除,只留下: (主页>第3层>第4层) 但是,我不知道如何更新GetDynamicNodeCollection以允许正确显示整个面包屑痕迹。选项#1 使用从SiteMapPath帮助器隐藏级别1和级别2的节点Asp.net mvc 更改MVCSiteMapProvider面包屑深度,asp.net-mvc,asp.net-mvc-3,mvcsitemapprovider,Asp.net Mvc,Asp.net Mvc 3,Mvcsitemapprovider,我正在处理一个使用MVCSiteMapProvider和动态节点设置面包屑的页面。GetDynamicNodeCollection方法似乎只为breadcrumbs设置直接父级,因此breadcrumbs将只显示两级深度。也就是说,如果您导航到层次结构中的第三或第四级,请说: (主页>级别1>级别2>级别3>级别4) 第一层或第二层被移除,只留下: (主页>第3层>第4层) 但是,我不知道如何更新GetDynamicNodeCollection以允许正确显示整个面包屑痕迹。选项#1 使用从Sit
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;
}
}
公共类MyDynamicNodeProvider
:dynamicodeProviderBase
{
公共重写IEnumerable GetDynamicNodeCollection(ISiteMapNode节点)
{
//一级
yield返回this.MakeInvisibleOnSiteMapPath(
新DynamicNode()
{
Key=“Level1Key”,
Title=“级别1”,
Controller=“Home”,
Action=“Level1”
});
//二级
yield返回this.MakeInvisibleOnSiteMapPath(
新DynamicNode()
{
Key=“Level2Key”,
ParentKey=“Level1Key”,
Title=“Level2”,
Controller=“Home”,
Action=“Level2”
});
//三级
新DynamicNode()的收益回报率
{
Key=“Level3Key”,
ParentKey=“Level2Key”,
Title=“Level3”,
Controller=“Home”,
Action=“Level3”
};
}
专用DynamicNode MakeInvisibleOnSiteMapPath(DynamicNode DynamicNode)
{
//设置可见性
dynamicNode.VisibilityProvider=“MvcSiteMapProvider.FilteredItemsNodeVisibilityProvider,MvcSiteMapProvider”;
添加(“可见性”、“!SiteMapPathHelper”);
返回动态节点;
}
}
请注意,如果您在站点的不同区域具有不同的可见性要求,则可以将其与一起使用。如果您的需求更高级,您也可以这样做
选项2
如果您的节点可见性根据上下文而改变,您可能会考虑使用内置的SITMePATAH助手,因为它可能比使用可见性提供程序更容易做到。您只需要构建一个返回HTML字符串的MvcSiteMapHtmlHelper类的扩展方法。你可以从逆向工程中得到一些灵感。我已经建立了一个演示如何做到这一点