MVC - вызов нескольких контроллеров для одного представления - PullRequest
0 голосов
/ 28 марта 2011

У меня есть представление, отображающее студентов, курсы, предметы одновременно. У меня есть 3 разных контроллера, которые получают модель для каждого.

Я не хочу объединять 3 разные модели в одну модель, а затем сделать один вызов контроллера. Вместо этого я хочу 3 разных контроллера и сделать 3 вызова на эти контроллеры. Как этого добиться?

public class ABCController : Controller
{
    public ActionResult Students()
    {
        return View(RepositoryHelper.GetStudentList());
    }

    public ActionResult Courses()
    {
        return View(RepositoryHelper.GetCoursesList());
    }

    public ActionResult Subjects()
    {
        return View(RepositoryHelper.GetSubjectsList());
    }
}

- Просмотр

 using (Html.BeginForm("GetData", "University", FormMethod.Post, new { id = "parameters" }))
    {
        @:<table>
            @:<tr><td>
               @Html.DropDownList("Students")
            @:</tr></td>
            @:<tr><td>
               @Html.DropDownList("Courses")
            @:</tr></td>
            @:<tr><td>
               @Html.DropDownList("Subjects")
            @:</tr></td>
        @:</table>
        @:<p><input type='submit' value='Submit></p>
    }

Ответы [ 3 ]

3 голосов
/ 28 марта 2011

Вы должны заключить ваши модели в класс ViewModel и создать представление, которое наследует эту модель представления.

1 голос
/ 28 марта 2011

Я бы сделал частичные представления для студентов, курсов и предметов, а затем использовал @Html.RenderAction("Subjects", "ABCController")

для визуализации различных частей

0 голосов
/ 28 марта 2011

Глядя на то, что вы пытаетесь сделать, я бы сказал, что ajax - лучший подход.В MVC уже есть Jquery, поэтому я бы порекомендовал использовать его.

Таким образом, вы можете сначала загрузить выпадающий список для студентов (передавая данные из контроллера). И как только пользователь выберет студента, вы можете загрузить источники и предметы.Таким образом, вы можете изменить методы контроллеров, чтобы ограничить результаты в зависимости от того, что они выбрали.

Если вы хотите сохранить свой маршрут, я бы поработал с контроллером и создал бы модель на лету.Я бы сказал, что вы можете использовать динамический объект, но он не передается от контроллера к представлению.Чтобы обойти это, вы можете использовать Dictionary.

var data = new Dictionary () data.Add ("subject", RepositoryHelper.GetStudentList ()) data.Add ("Courses", RepositoryHelper.GetCoursesList ()) data.Add ("subject", RepositoryHelper.GetSubjectsList ()) return View (Data);

Лично я бы выбрал вариант 1.

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