首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET MVC 3 Razor递归函数

ASP.NET MVC 3 Razor递归函数
EN

Stack Overflow用户
提问于 2011-06-21 17:10:44
回答 3查看 31.7K关注 0票数 81

好的,我想显示一个包含列表列表的列表...

我没有办法知道有多少级别可以显示,所以我想这是我打破旧的递归例程的地方。

不过,我在如何处理这件事上遇到了麻烦。

这是我到目前为止所拥有的(在视图中-简化):

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

现在,这些对象中的每个对象都有一个列表。我想要显示这个div下面的每个级别,例如,每个级别都有一个制表符缩进。

我认为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);
             }
         }
     }
 }

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-21 18:34:04

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>
}
票数 211
EN

Stack Overflow用户

发布于 2011-06-21 17:26:51

我认为最好为此创建一个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)
}
票数 13
EN

Stack Overflow用户

发布于 2021-04-20 01:28:29

在.Net核心中,我们必须使用@functions而不是helper标记。下面的代码可能对某些人有用。这里的"IssuerData“是我的自定义对象

@{
      ShowTreeData(Model.HierarchyList);
}

    @functions{

  public static void ShowTreeData(IList<IssuerData> issuers)
      {
       <ul>
      @foreach (var i in issuers)
           {
           <li>
            @i.IssuerName
             @if (i.Children.Any())
               {
                 ShowTreeData(i.Children);
               }
            </li>
          }
       </ul>
       }
   }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6422895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档