我有一个4级深度节点结构,其中最高级别由1个根节点组成。
我想要做的是获取某个属性为真的第4级中的所有节点,例如:
获取nodePropertyX == true的所有第4级节点。
现在,我可以使用for-each循环执行此操作,并迭代上面级别中的所有项目,但我觉得它效率低下。
如何以更有效的方式实现目标?有没有办法可以缓存我的数据集? (我将结果作为数据表返回)?
什么是首选方法:使用C#control(.ascx)或razor脚本(.cshtml)?
答案 0 :(得分:0)
根据您对这些节点的处理方式,您可以使用 razor ,宏以及宏的内置缓存功能缓存输出宏:
以下是如何从根节点获取第4级的所有节点,其属性 nodePropertyX 等于值:
@foreach (var item in @Model.AncestorOrSelf().Descendants()
.Where("Visible")
.Where("level=4")
.Where("nodePropertyX == \"value\""))
{
<a href="@item.Url">@item.Name</a>
}
将此代码放在脚本文件(部分开发人员,节点脚本文件)中,使用此脚本文件创建宏,然后插入任何地方(在任何模板上)的宏都要显示那些节点的列表。
要缓存宏的输出,请选择宏并设置相应的属性(缓存期,按页缓存和缓存个性化)。