如何在 foreach 循环中列出子项的子项?
How do I list children of children in a foreach loop?
所以,我在这里要做的是动态创建一个列表,并在每个列表项中有一个嵌套列表。为了更容易想象,我具体做的是列出年份(子节点),然后列出这些年的月份(年份节点的子节点),用于组织日志。
到目前为止,我这里的代码可以列出年份...但我不确定要为子节点的子节点做什么。我是否必须调用一个新变量,或者有没有办法通过本质上告诉它 "okay, now list the children of the child you just displayed"?
不确定它是否重要,但这在 Umbraco 模板中。
<ul>
@{
var LogsNode = Model.Content.AncestorOrSelf("LogsLanding");
}
@foreach (var node in LogsNode.Children.Where("Visible"))
{
<li>
<h2>@node.AsDynamic().Name</h2>
<ul>
<li>
CHILDREN OF LISTED NODE HERE
</li>
</ul>
</li>
}
</ul>
您需要将您的一些逻辑提取到辅助方法中,这样您就可以从内部调用它,每次都传递一个新的父级。
在 Umbraco 中有一些模板,您可以 use/adapt 满足自己的需要。一个这样的模板应该可以为您解决这个问题(或者至少演示如何实现)是 SiteMap 模板,如下所示:
@inherits umbraco.MacroEngines.DynamicNodeContext
@* Render the sitemap by passing the root node to the traverse helper *@
<div class="sitemap">
@traverse(@Model.AncestorOrSelf())
</div>
@* Helper method to travers through all descendants *@
@helper traverse(dynamic node)
{
@* If a MaxLevelForSitemap parameter is passed to the macro, otherwise default to 4 levels *@
var maxLevelForSitemap = String.IsNullOrEmpty(Parameter.MaxLevelForSitemap) ? 4 : int.Parse(Parameter.MaxLevelForSitemap);
@* Select visible children *@
var items = node.Children.Where("Visible").Where("Level <= " + maxLevelForSitemap);
@* If any items are returned, render a list *@
if (items.Any())
{
<ul>
@foreach (var item in items)
{
<li class="level-@item.Level">
<a href="@item.Url">@item.Name</a>
@*Run the traverse helper again *@
@traverse(item)
</li>
}
</ul>
}
}
所以,我在这里要做的是动态创建一个列表,并在每个列表项中有一个嵌套列表。为了更容易想象,我具体做的是列出年份(子节点),然后列出这些年的月份(年份节点的子节点),用于组织日志。
到目前为止,我这里的代码可以列出年份...但我不确定要为子节点的子节点做什么。我是否必须调用一个新变量,或者有没有办法通过本质上告诉它 "okay, now list the children of the child you just displayed"?
不确定它是否重要,但这在 Umbraco 模板中。
<ul>
@{
var LogsNode = Model.Content.AncestorOrSelf("LogsLanding");
}
@foreach (var node in LogsNode.Children.Where("Visible"))
{
<li>
<h2>@node.AsDynamic().Name</h2>
<ul>
<li>
CHILDREN OF LISTED NODE HERE
</li>
</ul>
</li>
}
</ul>
您需要将您的一些逻辑提取到辅助方法中,这样您就可以从内部调用它,每次都传递一个新的父级。
在 Umbraco 中有一些模板,您可以 use/adapt 满足自己的需要。一个这样的模板应该可以为您解决这个问题(或者至少演示如何实现)是 SiteMap 模板,如下所示:
@inherits umbraco.MacroEngines.DynamicNodeContext
@* Render the sitemap by passing the root node to the traverse helper *@
<div class="sitemap">
@traverse(@Model.AncestorOrSelf())
</div>
@* Helper method to travers through all descendants *@
@helper traverse(dynamic node)
{
@* If a MaxLevelForSitemap parameter is passed to the macro, otherwise default to 4 levels *@
var maxLevelForSitemap = String.IsNullOrEmpty(Parameter.MaxLevelForSitemap) ? 4 : int.Parse(Parameter.MaxLevelForSitemap);
@* Select visible children *@
var items = node.Children.Where("Visible").Where("Level <= " + maxLevelForSitemap);
@* If any items are returned, render a list *@
if (items.Any())
{
<ul>
@foreach (var item in items)
{
<li class="level-@item.Level">
<a href="@item.Url">@item.Name</a>
@*Run the traverse helper again *@
@traverse(item)
</li>
}
</ul>
}
}