所以,我在这里要做的是动态创建一个列表,并在每个列表项中有一个嵌套列表。为了更容易想象,我特别要做的是列出年份(子节点),然后列出那些年的月份(节点的子节点),以便组织日志。
到目前为止,我所拥有的代码列出了多年......但我不确定如何为子节点的子节点做些什么。我是否必须调用一个新变量,或者有没有办法通过基本上告诉它“好了,现在列出你刚刚展示的孩子的孩子”?
不确定它是否重要,但这是在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>
答案 0 :(得分:2)
您需要将一些逻辑提取到辅助方法中,这样您就可以从内部调用它,每次都传递一个新的父级。
在Umbraco中,您可以使用/适应您自己的需求。一个这样的模板应该为你解决这个问题(或者至少演示如何实现)是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>
}
}