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);
}
}
}
}
но как вы можете видеть, мне явно нужна помощь:)
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