Razor 如何在foreach循环中列出子对象的子对象?
所以,我在这里要做的是动态创建一个列表,并在每个列表项中创建一个嵌套列表。为了便于想象,我具体做的是列出年份(子节点),然后列出这些年份的月份(子节点),以便组织日志 到目前为止,我这里的代码可以列出年份。。。但我不确定如何处理子节点的子节点。我是否必须调用一个新变量,或者是否有一种方法可以通过告诉它“好的,现在列出您刚才显示的孩子的孩子”来实现 不确定这是否重要,但这是在一个Umbraco模板中Razor 如何在foreach循环中列出子对象的子对象?,razor,foreach,umbraco,nodes,Razor,Foreach,Umbraco,Nodes,所以,我在这里要做的是动态创建一个列表,并在每个列表项中创建一个嵌套列表。为了便于想象,我具体做的是列出年份(子节点),然后列出这些年份的月份(子节点),以便组织日志 到目前为止,我这里的代码可以列出年份。。。但我不确定如何处理子节点的子节点。我是否必须调用一个新变量,或者是否有一种方法可以通过告诉它“好的,现在列出您刚才显示的孩子的孩子”来实现 不确定这是否重要,但这是在一个Umbraco模板中 <ul> @{ var LogsNode = Model.Co
<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>
@{
var LogsNode=Model.Content.AncestorOrSelf(“LogsLanding”);
}
@foreach(LogsNode.Children.Where(“可见”)中的var节点)
{
-
@node.AsDynamic().Name
-
此处列出的节点的子节点
}
您需要将一些逻辑提取到一个helper方法中,这样您就可以在每次传递新的父对象时从其内部调用它
在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>
}
}
@继承umbraco.MacroEngines.dynamicontext
@*通过将根节点传递给遍历辅助对象来渲染站点地图*@
@遍历(@Model.AncestorOrSelf())
@*要遍历所有子体的Helper方法*@
@辅助导线测量(动态节点)
{
@*如果将MaxLevelForItemAP参数传递给宏,则默认为4个级别*@
var maxLevelForSitemap=String.IsNullOrEmpty(Parameter.maxLevelForSitemap)?4:int.Parse(Parameter.maxLevelForSitemap);
@*选择可见的子项*@
var items=node.Children.Where(“可见”).Where(“级别”使用一个新的foreach,@foreach(node.Children中的var childnode){@childnode.Name }使用嵌套的@foreach需要知道要遍历的树的深度,并为每个级别重复代码,这不是很灵活。@JanBluemink这正是我需要的。