Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Razor 如何在foreach循环中列出子对象的子对象?_Razor_Foreach_Umbraco_Nodes - Fatal编程技术网

Razor 如何在foreach循环中列出子对象的子对象?

Razor 如何在foreach循环中列出子对象的子对象?,razor,foreach,umbraco,nodes,Razor,Foreach,Umbraco,Nodes,所以,我在这里要做的是动态创建一个列表,并在每个列表项中创建一个嵌套列表。为了便于想象,我具体做的是列出年份(子节点),然后列出这些年份的月份(子节点),以便组织日志 到目前为止,我这里的代码可以列出年份。。。但我不确定如何处理子节点的子节点。我是否必须调用一个新变量,或者是否有一种方法可以通过告诉它“好的,现在列出您刚才显示的孩子的孩子”来实现 不确定这是否重要,但这是在一个Umbraco模板中 <ul> @{ var LogsNode = Model.Co

所以,我在这里要做的是动态创建一个列表,并在每个列表项中创建一个嵌套列表。为了便于想象,我具体做的是列出年份(子节点),然后列出这些年份的月份(子节点),以便组织日志

到目前为止,我这里的代码可以列出年份。。。但我不确定如何处理子节点的子节点。我是否必须调用一个新变量,或者是否有一种方法可以通过告诉它“好的,现在列出您刚才显示的孩子的孩子”来实现

不确定这是否重要,但这是在一个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>
    @{ 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这正是我需要的。