Многоуровневое вложенное меню 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.
Как я могу вообще это сделать?