ASP.NETMVC 3 Razor递归函数问题如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (56)

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

我无法知道需要显示多少级别,所以我认为这是我分解旧的递归例程的地方。

尽管如此,但我仍然遇到麻烦。

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

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

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

我认为Razor功能是这里要做的,但我需要一些帮助来形成它。这是我的想法:

@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关键词。

@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)
}

扫码关注云+社区

领取腾讯云代金券