#asp.net-mvc #asp.net-mvc-3 #view
#asp.net-mvc #asp.net-mvc-3 #Вид
Вопрос:
У меня есть база данных, в которой есть три таблицы: A, B и C.
Я хочу, чтобы представление отображало данные определенным образом. Перебираем A, затем перечисляем строки B под A, где B.Помощь = A.ID , перечисляя каждую строку C под каждой строкой B, где C.Ставка = B.ID .
Я новичок в ASP.NET MVC3, и я не уверен, как это сделать. Все примеры, которые я видел, прямолинейны.
Ответ №1:
Я бы начал с добавления трех моделей: 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; }
}
В моем контроллере я бы добавил метод action, который заполняет эти модели данными. В целях тестирования я использую фиктивные данные.
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
(Вам нужно будет представить некоторый стиль.) Надеюсь, этот пример поможет вам.
(примечание) Забавно, что перед этим третьим foreach нет символа «@». Это не опечатка или ошибка, если я помещу ее туда, возникнет исключение. Я подозреваю, что небольшая ошибка в движке просмотра Razor.
Ответ №2:
Если вы говорите, что у вас есть три модели A, B и C, и вы хотите показать представление с данными, обработанными из A, B и C.
Вы можете сделать это, в методе действия вашего контроллера выполните фильтрацию и верните представление в виде динамической модели (анонимный тип). В представлении вы можете прочитать эту модель и структурировать свою страницу, используя требуемый html. Означает использовать
При желании вы можете определить новый класс модели, который будет представлять требуемый вам результирующий тип.