Я бы начал с добавления трех моделей: A, B и C. В этих моделях A содержит список B, а B содержит список C. В целях тестирования я также добавил бы что-то, чтобы уникально идентифицировать их, например, Имя. Пример:
public class A
{
public string Name { get; set; }
public List<B> Bs { get; set; }
}
public class B
{
public string Name { get; set; }
public List<C> Cs { get; set; }
}
public class C
{
public string Name { get; set; }
}
В моем контроллере я бы добавил метод действия, который заполняет эти модели данными. Для тестирования я использую фиктивные данные.
public ActionResult List()
{
C c1 = new C() { Name = "C1" };
C c2 = new C() { Name = "C2" };
C c3 = new C() { Name = "C3" };
C c4 = new C() { Name = "C4" };
B b1 = new B() { Name = "B1", Cs = new List<C>() { c1, c3 } };
B b2 = new B() { Name = "B2", Cs = new List<C>() { c2, c4 } };
B b3 = new B() { Name = "B3", Cs = new List<C>() { c1, c2, c4 } };
B b4 = new B() { Name = "B4", Cs = new List<C>() { c1, c2, c3, c4 } };
A a1 = new A() { Name = "A1", Bs = new List<B>() { b1, b2 } };
A a2 = new A() { Name = "A2", Bs = new List<B>() { b3, b4 } };
A a3 = new A() { Name = "A3", Bs = new List<B>() { b1, b2, b3, b4 } };
List<A> listOfAs = new List<A>() { a1, a2, a3 };
return View(listOfAs);
}
И для финальной части, представление для отображения всего этого. Простое использование @foreach во вложенном виде дает нам то, что нам нужно:
@model IEnumerable<HelloMvc.Models.A>
<h2>List of As</h2>
<table>
<tr>
<th></th>
</tr>
@foreach (var a in Model) {
<tr>
<td>
@a.Name<br />
@foreach (var b in a.Bs) {
@b.Name<br />
foreach (var c in b.Cs)
{
@c.Name<br />
}
}
</td>
</tr>
}
Обратите внимание, что HelloMvc - это мое пространство имен. Возможно, вам нужно изменить это на собственное пространство имен.
Все вместе, это приводит к списку A с вложенными B и C:
A1
B1
C1
C3
B2
C2
C4
A2
B3
C1
C2
C4
B4
C1
C2
C3
C4
A3
B1
C1
C3
B2
C2
C4
B3
C1
C2
C4
B4
C1
C2
C3
C4
(Вам придётся представить какой-нибудь стиль.) Надеюсь, этот пример вам поможет.
(Sidenote)
Забавно, что этот третий foreach не имеет перед собой «@». Это не опечатка и не ошибка, если я ее укажу, возникает исключение. Небольшая ошибка в движке Razor View, я подозреваю.