Как загрузить вид с одного контроллера, используя другой? - PullRequest
1 голос
/ 17 января 2012

Действительно простой вопрос: я хочу иметь возможность перенаправлять с одной страницы на другую в Razor MVC.

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

Теперь я хочу отобразить это второе представление, используя вновь созданную модель.Однако, кажется, нет способа использовать View () для этого (если я не слепой).Два контроллера находятся в разных папках, поэтому он не может автоматически найти страницу для загрузки.

Есть идеи?

Ответы [ 4 ]

0 голосов
/ 17 января 2012

Если страница должна перенаправить на правильный URL для второго контроллера, я бы:

  1. Отправить на первый контроллер.
  2. Добавить модель в TempData.
  3. Возврат RedirectResult на второй контроллер.
  4. Извлечение первой модели из TempData.
  5. Обработка и возврат консолидированной модели.

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

0 голосов
/ 17 января 2012

Похоже, что это ответ на этот вопрос здесь: Как смоделировать Server.Transfer в ASP.NET MVC?

В итоге вы должны посмотреть на:

return RedirectToRoute(new { controller = "home"});

или посмотрите другие варианты перенаправления:

0 голосов
/ 17 января 2012

В идеале вы не можете вернуть вид из другого контроллера и из другого действия. Но вы можете вернуть вид из одного контроллера и из другого действия.

Чтобы ответить на ваш вопрос, мы всегда можем перенаправить на другой контроллер и разные действия. В этом случае это будет 302 GET-запрос . Так что если вы не можете передавать модели через контроллеры.

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

Лучший подход будет либо,

1) Храните оба действия в одном контроллере.

или

2) Создайте модель в действии второго контроллера.

0 голосов
/ 17 января 2012

Вы можете использовать что-то вроде

return View("../FolderName/ViewName", model);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...