2016-04-15 27 views
3

我有一個C#list多層次,就像這樣:內剃刀通過列表進行遍歷查看

enter image description here

我想在我看來,做的是顯示列表中的所有項目,而不僅僅是父母。我與我當前的代碼的結果是:

enter image description here

所以,那些只是父母。

我的觀點:

@model IEnumerable<Docks.Base.Models.RootObject> 

@{ 
    ViewBag.Title = "Docs Index"; 
    Layout = "~/Views/_Layout.cshtml"; 
} 


<div class="page-wrapper-inside"> 
    <div class="groups"> 
     <div class="group-wrapper"> 
      <h1 class="group-title">Manage Navigation</h1> 
      <div class="group"> 
       <div class="blocks-wrapper row"> 
        <h1 class="intranet-group-title">Overview</h1> 
        <table class="table full-width"> 
         <thead> 
          <tr> 
           <th>Id</th> 
           <th>Name</th> 
           <th>Actions</th> 
          </tr> 
         </thead> 
         <tbody> 
          @foreach (var item in Model) 
          { 
           <tr> 
            <td>@Html.DisplayFor(modelItem => item.id)</td> 
            <td>@Html.DisplayFor(modelItem => item.name)</td> 
            <td> 
             @Html.ActionLink("Edit", "Edit", new { id = item.id }) | 
             @Html.ActionLink("Details", "Details", new { id = item.id }) | 
             @Html.ActionLink("Delete", "Delete", new { id = item.id }) 
            </td> 
           </tr> 
          } 
         </tbody> 
        </table> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 

我的模型:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace Docks.Base.Models 
{ 

    public class Child 
    { 
     #region Properties 
     public int id { get; set; } 
     public int parentId { get; set; } 
     public int typeId { get; set; } 
     public int sortOrder { get; set; } 
     public int authScope { get; set; } 
     public string name { get; set; } 
     public string area { get; set; } 
     public object action { get; set; } 
     public object controller { get; set; } 
     public object root { get; set; } 
     public object root_Included { get; set; } 
     public object runLocation { get; set; } 
     public string iconName { get; set; } 
     public bool read { get; set; } 
     public bool edit { get; set; } 
     public bool add { get; set; } 
     public bool delete { get; set; } 
     public bool details { get; set; } 
     public bool search { get; set; } 
     public bool childDependent { get; set; } 
     public bool parentDependent { get; set; } 
     public bool blocked { get; set; } 
     public int count { get; set; } 
     public bool beginGroup { get; set; } 
     public int itemType { get; set; } 
     public string url { get; set; } 
     public bool isInternal { get; set; } 
     public List<Child> childs { get; set; } 
     #endregion 
    } 

    public class RootObject 
    { 
     #region Properties 
     public int id { get; set; } 
     public object parentId { get; set; } 
     public int typeId { get; set; } 
     public int sortOrder { get; set; } 
     public int authScope { get; set; } 
     public string name { get; set; } 
     public string area { get; set; } 
     public object action { get; set; } 
     public object controller { get; set; } 
     public object root { get; set; } 
     public object root_Included { get; set; } 
     public object runLocation { get; set; } 
     public string iconName { get; set; } 
     public bool read { get; set; } 
     public bool edit { get; set; } 
     public bool add { get; set; } 
     public bool delete { get; set; } 
     public bool details { get; set; } 
     public bool search { get; set; } 
     public bool childDependent { get; set; } 
     public bool parentDependent { get; set; } 
     public bool blocked { get; set; } 
     public int count { get; set; } 
     public bool beginGroup { get; set; } 
     public int itemType { get; set; } 
     public object url { get; set; } 
     public bool isInternal { get; set; } 
     public List<Child> childs { get; set; } 
     #endregion 
    } 

} 

我的控制器:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using Docks.Base.Models; 
using Newtonsoft.Json; 

namespace Docks.Base.Controllers.Api 
{ 
    public class NavigationController : Controller 
    { 
     // GET: Navigation 
     public ActionResult Index() 
     { 
      string json = System.IO.File.ReadAllText(@"C:\develop\spl_development\main\Docks\Docks.Base\App\Data\LeftBar\data.json"); 
      List<RootObject> list = JsonConvert.DeserializeObject<List<RootObject>>(json); 

      return View(list); 
     } 
    } 
} 

我希望我做我的p roblem清楚和有人有一個解決方案,在此先感謝!

+1

如果要顯示所有子項中,那麼你可以遞歸迭代童車財產。 –

+1

你的模型看起來不錯,你已經在'Child'類和'RouteObject'類中包含'List ',而它應該只在'RouteObject'類中。 – Mairaj

+0

@MairajAhmad嗯,爲什麼會這樣?我的孩子也有孩子。所以我認爲我的名單有三個層次。 – Peurr

回答

5

你可以做到這一點通過編寫內聯函數,把它遞歸

 @helper PopulateChild(Child child) 
     { 
      <tr> 
       <td>@Html.DisplayFor(modelItem => child.id)</td> 
       <td>@Html.DisplayFor(modelItem => child.name)</td> 
       <td> 
        @Html.ActionLink("Edit", "Edit", new { id = child.id }) | 
        @Html.ActionLink("Details", "Details", new { id = child.id }) | 
        @Html.ActionLink("Delete", "Delete", new { id = child.id }) 
       </td> 
      </tr> 
      foreach (var item in child.childs) 
      { 
       PopulateChild(item); 
      } 
     } 
     @foreach (var item in Model) 
     { 
      <tr> 
       <td>@Html.DisplayFor(modelItem => item.id)</td> 
       <td>@Html.DisplayFor(modelItem => item.name)</td> 
       <td> 
        @Html.ActionLink("Edit", "Edit", new {id = item.id}) | 
        @Html.ActionLink("Details", "Details", new {id = item.id}) | 
        @Html.ActionLink("Delete", "Delete", new {id = item.id}) 
       </td> 
      </tr> 

      foreach (var child in item.childs) 
      { 
       @PopulateChild(child) 
      } 

     } 
+1

感謝您的這個偉大的答案! – Peurr