ASP.NET MVC 3 Razorrecursion函数

好的,所以我想显示一个包含列表清单的清单…

我无法知道需要显示多less个关卡,所以我想这就是我发现旧的recursion程序的地方。

我正在遇到问题,但是如何去做这个。

这是我到目前为止(在视图 – 简化):

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

现在每个这些对象也都有一个List <MyObject>。 我想要显示这个div下面的每个级别,每个级别的标签缩进例如。

我认为Razorfunction在这里是可以做的,但是我需要一些帮助来形成它。 这是我的想法:

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

但正如你所看到的,我显然需要一些帮助:)

Razor视图引擎允许使用@helper关键字编写内联recursion助手。

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

我认为最好为此创build一个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) }