Визуализация комплексного вида в MVC 3 - PullRequest
2 голосов
/ 28 октября 2011

У меня есть база данных, в которой есть три таблицы: A, B и C.

Я хочу, чтобы представление отображало данные определенным образом.Цикл A, затем перечисление строк B под A, где B.aID = A.ID, перечисление каждой строки C под каждой строкой B, где C.bId = B.ID.

Я новичок вASP.NET MVC3 и я не уверен, как это сделать.Все примеры, которые я видел, просты.

Ответы [ 2 ]

2 голосов
/ 28 октября 2011

Я бы начал с добавления трех моделей: 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, я подозреваю.

1 голос
/ 28 октября 2011

Если вы говорите, что у вас есть три модели A, B и C - и вы хотите показать представление с данными, управляемыми из A, B и C.

Вы можете сделать это, используя метод действия вашегоКонтроллер выполняет фильтрацию и возвращает представление в виде динамической модели (анонимного типа).В представлении вы можете прочитать эту модель и структурировать свою страницу, используя необходимый HTML.Средства для использования

При желании вы можете определить новый класс Model, который будет представлять требуемый тип результирующего типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...