无限菜单递归函数C#

时间:2017-07-13 09:36:00

标签: c# asp.net-mvc html5

我想知道如何创建一个递归界面,我有一套菜单,这些菜单是有孩子的父母等等,因为没有最大数量的孩子想找到这个的解决方案问题,我离开了我在 ASP.NET MVC 代码和 C#

中所做的工作

@foreach (var opcaoPai in opcoesPai)
            {

                var filhos = opcaoPai.OpcaoMenuFilhosSet.OrderBy(o => o.OrdemMenu);

            <div class="list-group-item list-group-item-info"  data-parent="#@opcaoPai.IdOpcao">
                <span>
                    @if (filhos.Any())
                    {
                        <a href="#@opcaoPai.IdOpcao" data-toggle="collapse">
                            <i style="float:left;margin-right:3px;" class="fa fa-caret-down"></i>
                            @Html.DisplayFor(modelItem => opcaoPai.Titulo)
                        </a>
                    }
                    else
                    {
                        @Html.DisplayFor(modelItem => opcaoPai.Titulo)
                    }
                </span>
                <!--<td>
                    @Html.DisplayFor(modelItem => opcaoPai.OrdemMenu)
                </td>
                <td>
                    @if (opcaoPai.IdAccao != null)
                    {
                        @(opcaoPai.AccaoSet.ControladorSet.PluginSet.Designacao + " - " + opcaoPai.AccaoSet.ControladorSet.Designacao + " - " + opcaoPai.AccaoSet.Designacao)
                    }
                </td>
                <td>
                    @Html.DisplayFor(modelItem => opcaoPai.OpcaoMenuPaiSet.Titulo)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => opcaoPai.ConteudoSet.Titulo)
                </td>-->
                <a href="@Url.Action("Apagar" ,new {id=opcaoPai.IdOpcao})" style="float:right;margin-right:10px;" id="menusgestao" type="btn" class="btn btn-danger btn-xs btnmenus">
                    <i id="iconsmenugestao" class="fa fa-lock" aria-hidden="true"></i>Eliminar
                </a>
                <a href="@Url.Action("Detalhes", new {id=opcaoPai.IdOpcao})" style="float:right;margin-right:10px;" id="menusgestao" type="btn" class="btn btn-info btn-xs btnmenus">
                    <i id="iconsmenugestao" class="fa fa-info-circle" aria-hidden="true"></i>Detalhes
                </a>
                <a href="@Url.Action("Editar", new {id=opcaoPai.IdOpcao})" style="float:right;margin-right:10px;" id="menusgestao" type="btn" class="btn btn-warning btn-xs btnmenus">
                    <i id="iconsmenugestao" class="fa fa-pencil" aria-hidden="true"></i>Editar
                </a>
            </div>
            <div id="@opcaoPai.IdOpcao" class="collapse list-group-submenu">
                @foreach (var filho in filhos)
                {
                    <div class="list-group-item list-group-item-warning" data-toggle="collapse" data-parent="#@opcaoPai.IdOpcao-@filho.IdOpcao">
                        <span>
                            @Html.DisplayFor(modelItem => filho.Titulo)
                        </span>
                        <!--<td>
                            @Html.DisplayFor(modelItem => filho.OrdemMenu)
                        </td>
                        <td>
                            @if (filho.IdAccao != null)
                            {
                                @(filho.AccaoSet.ControladorSet.PluginSet.Designacao + " - " + filho.AccaoSet.ControladorSet.Designacao + " - " + filho.AccaoSet.Designacao)
                            }
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => filho.OpcaoMenuPaiSet.Titulo)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => filho.ConteudoSet.Titulo)
                        </td>-->
                        <a href="@Url.Action("Apagar" ,new {id=filho.IdOpcao})" style="float:right;margin-right:10px;" id="menusgestao" type="btn" class="btn btn-danger btn-xs btnmenus">
                            <i id="iconsmenugestao" class="fa fa-lock" aria-hidden="true"></i>Eliminar
                        </a>
                        <a href="@Url.Action("Detalhes", new {id=filho.IdOpcao})" style="float:right;margin-right:10px;" id="menusgestao" type="btn" class="btn btn-info btn-xs btnmenus">
                            <i id="iconsmenugestao" class="fa fa-info-circle" aria-hidden="true"></i>Detalhes
                        </a>
                        <a href="@Url.Action("Editar", new {id=filho.IdOpcao})" style="float:right;margin-right:10px;" id="menusgestao" type="btn" class="btn btn-warning btn-xs btnmenus">
                            <i id="iconsmenugestao" class="fa fa-pencil" aria-hidden="true"></i>Editar
                        </a>
                    </div>
                }
            </div>
        }

1 个答案:

答案 0 :(得分:0)

假设您有这种结构:

public class Node {
  List<Node> Filhos {get;set;}
}

要递归渲染,您只需要创建一个接收Node作为参数的html渲染助手:

@helper RenderSomething(Node node) {
   // html to display node information
   foreach(Node filho in node.Filhos) {
     RenderSomething(filho);
   }
}