Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET MVC 3 Razor recursive function

Okay, so I want to display a list containing lists of lists of lists...

I have no way of knowing how many levels there are to display, so I figured this is where I break out the old recursive routine.

I'm having trouble with exactly how to go about this though.

This is what I have so far (in view - simplified):

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

Now each of these objects also have a List<MyObject>. I want to display each level below this div, with a tab indent per level for instance.

I was thinking a Razor function would be the thing to do here, but I need some help in forming it. Here's my thinking:

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

But as you can see, I plainly need some help :)

like image 697
Dynde Avatar asked Jun 21 '11 09:06

Dynde


1 Answers

The Razor view engine allows to write inline recursive helpers with the @helper keyword.

@helper ShowTree(IEnumerable<Foo> foos) {     <ul>         @foreach (var foo in foos)         {             <li>                 @foo.Title                 @if (foo.Children.Any())                 {                     @ShowTree(foo.Children)                 }             </li>         }     </ul> } 
like image 83
Paolo Moretti Avatar answered Sep 17 '22 00:09

Paolo Moretti