Многоуровневое вложенное меню ASP.NET

У меня есть следующая таблица в БД:

public class ExamCategory
    {
        public int Id { set; get; }
        public string Name { set; get; }

        public int? СategoryId { set; get; }
        [ForeignKey("СategoryId")]
        public virtual ExamCategory Category { set; get; }

        public ICollection<ExamCategory> Categories { get; set; }
        public ICollection<Exam> Exams { get; set; }
        public ICollection<Test> Tests { get; set; }
        public ExamCategory()
        {
            Categories = new List<ExamCategory>();
            Exams = new List<Exam>();
            Tests = new List<Test>();
        }
    }

Как можно видеть, таблица вложена сама в себя. Есть так же таблица Test, которая содержит один экземпляр ExamCategory. Я передаю в представление Тест, включающий поверхностный уровень из ЭкзамКатегорий, но я не знаю, как мне брать остальные вложенные Категории.

public ActionResult DoTest()
        {
            ViewBag.DB = db;
            return View(db.Tests.Include(t => t.ExamCategory.Categories).FirstOrDefault());
        }
@model VKR2.Models.Test
@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<div class="container row align-self-center">
    <div class="col-7 testColor">
        <h2>История болезни</h2>
        <div class="container prokrutka">

        </div>
    </div>
    <div class="col-5 testColor">
        <h2>Действия</h2>

        <div class="prokrutka list-group">
            @ExamList(Model.ExamCategory)
    </div>
</div>

@helper ExamList(VKR2.Models.ExamCategory category)
{
    foreach (var c in category.Categories)
    {
        <button type="button" class="btn btn-light" data-toggle="collapse" data-target="#[email protected]">@c.Name</button>
        <div id="[email protected]" class="collapse in">
            <form method="post" action=""></form>
            @ExamList(с)
        </div>
    }
}

Я пытался передавать в представление БД целиком, но я не могу использовать как полагается методы LINQ внутри представления. Пытался делать с помощью частичного представления, тоже нету разницы.

Я находил решение с ThenInclude, но оно работает только с .NET Core.

Как я могу вообще это сделать?


Ответы (0 шт):