简体   繁体   English

在Razor View中迭代列表

[英]Iterating through list within Razor View

I have a C# list with multiple levels, like this: 我有一个包含多个级别的C# list ,如下所示:

在此输入图像描述

What I want to do in my view is display ALL items in the list, and not only the parents. 我想在我的视图中做的是显示列表中的所有项目,而不仅仅是父项。 My result with my current code is: 我当前代码的结果是:

在此输入图像描述

So, those are the parents only. 所以,那些只是父母。

My view: 我的看法:

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

My model: 我的模特:

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
    }

}

My controller: 我的控制器:

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

I hope I made my problem clear and someone has a solution, thanks in advance! 我希望我能清楚地解决问题,有人有解决方案,提前谢谢!

You can do that by writing inline function and calling it recursively 你可以通过编写内联函数并递归调用它来做到这一点

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

        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM