ASP.NET рекурсивная функция MVC 3 Razor



хорошо,поэтому я хочу отобразить список, содержащий списки списков списков...



у меня нет способа узнать, сколько уровней нужно отобразить, поэтому я решил, что именно здесь я нарушаю старую рекурсивную процедуру.



у меня возникли проблемы с тем, как именно это сделать.



это то, что я до сих пор (в виду - упрощенный):



@foreach(MyObject item in @Model.ListOfObjects){ 
<div> @item.Title </div>
//Call recursive function?
}


теперь каждый из этих объектов также имеет список. Я хочу, чтобы отобразить каждый уровень ниже этого div, например, с отступом вкладки на уровень.



Я думал, что функция бритвы будет здесь, но мне нужна помощь в ее формировании. Вот что я думаю:



@functions{
public static void ShowSubItems(MyObject _object){
if(_object.ListOfObjects.Count>0){
foreach(MyObject subItem in _object.listOfObjects){

// Show subItem in HTML
ShowSubItems(subItem);
}
}
}
}


но как вы можете видеть, мне явно нужна помощь:)

518   2  

2 ответов:

Razor view engine позволяет писать встроенные рекурсивные помощники с помощью @helper ключевое слово.

@helper ShowTree(IEnumerable<Foo> foos)
{
    <ul>
        @foreach (var foo in foos)
        {
            <li>
                @foo.Title
                @if (foo.Children.Any())
                {
                    @ShowTree(foo.Children)
                }
            </li>
        }
    </ul>
}

Я думаю, что лучше всего создать HTML-помощник для этого. Что-то вроде этого:

public static string ShowSubItems(this HtmlHelper helper, MyObject _object)
{
     StringBuilder output = new StringBuilder();
     if(_object.ListOfObjects.Count > 0)
     {
         output.Append("<ul>");

         foreach(MyObject subItem in _object.listOfObjects)
         {
             output.Append("<li>");
             output.Append(_object.Title);
             output.Append(html.ShowSubItems(subItem.listOfObjects);
             output.Append("</li>")
         }
         output.Append("</ul>");
     }
     return output.ToString();
}

тогда назовем это так:

@foreach(MyObject item in @Model.ListOfObjects){
    <div> @item.Title </div>
    @html.ShowSubItems(item)
}

Comments

    Ничего не найдено.