高效剃刀<ul>在视图中列出父子孙子等

时间:2017-05-22 18:23:39

标签: asp.net-mvc razor tree

我有一个父对象列表,其中包含我发送给视图的子对象。他们的孩子可以生孩子等等。是否有更简单的方法来迭代我的对象并根据我为无限子女设置的子列表生成<ul>列表 - &gt;孙子 - &gt;曾孙子等?

这就是我所拥有的:

<ul>
    @foreach (var item in Model)
    {       
        <li>
            @item.Name
            @if (item.Children != null)
            {
            <ul>
                @foreach (var child in item.Children)
                {
                <li>
                    @child.Name
                </li>

                    if (child.Children != null)
                    {
                    <li style="list-style:none;">
                        <ul>
                            @foreach (var grandchild in child.Children)
                            {
                            <li>
                                @grandchild.Name
                                @if (grandchild.Children != null)
                                {
                                    <ul>
                                        @foreach(var greatgrandchild in grandchild.Children)
                                        {
                                            <li>
                                                @greatgrandchild.Name
                                            </li>
                                        }
                                    </ul> 
                                }
                            </li>
                            }
                        </ul>
                    </li>
                    }
                }
            </ul>
            }
        </li>
        }
</ul>

1 个答案:

答案 0 :(得分:1)

你可以递归地做。

之类的东西
@Action<childBearing> recursive = (children) => {
    <ul>
        @foreach(var child in children){
           <li>
                @if(child.children != null){
                    recursive(child);
                }
                @child.name
            </li>
         }
    </ul>
}

其中childBearing是您的对象的任何类型。然而,这假设每一代都是相同的类型。我没有测试过它,但它可能是一个很好的起点。

编辑:您可能不希望将其设为匿名代理,如果您这样做,您可能需要查看此Can an anonymous method in C# call itself?