MVC2 - Возможно ли вызвать действие от РАЗНОГО контроллера? - PullRequest
0 голосов
/ 30 июня 2011

В контроллере можно ли вернуть вид действия с ДРУГОГО контроллера?Другой вариант - вернуть частичное представление, которое использует Html.Action (...), чтобы вернуть представление из другого контроллера, но мне было интересно, есть ли что-нибудь чище.Спасибо.

Ответы [ 5 ]

4 голосов
/ 30 июня 2011

Если это просто представление, которое вы хотите использовать повторно, вы можете указать путь к представлению.Например:

public ActionResult MyAction()
{
   // do your model magic here
   return View( "~/Views/OtherController/View.aspx", model );
}

Или вы можете переместить представление на Views/Shared, как уже предлагал Кайл.

1 голос
/ 11 июля 2011

Я закончил тем, что использовал свое оригинальное решение, которое имело общее представление, которое вызывает действие.Это было намного меньше кода, чем мне нужно.Спасибо.

1 голос
/ 30 июня 2011

Если вы хотите вызвать действие на другом контроллере, вы можете использовать Controller.RedirectToAction () и передать имя действия и контроллера.

Однако, это добавляет дополнительный обход сервера. Если вы хотите избежать этого, вы можете использовать класс TransferResult, показанный здесь:

Как смоделировать Server.Transfer в ASP.NET MVC?

1 голос
/ 30 июня 2011

Да, если это представление является общим. Поместите представление в папку Views/Shared в вашем проекте MVC, и оба контроллера смогут его вернуть.

0 голосов
/ 30 июня 2011

Вот стратегия, которую я использую для вызова другого действия без необходимости создавать специальное представление только для этой цели:

Создание общего представления, которое использует модель, которая определяет Action, Controller и RouteValues, и чьеединственная ответственность заключается в вызове RenderAction со значениями в этой модели.

Затем создайте вспомогательный метод в базовом классе контроллера, который принимает Action, Controller и RouteValues ​​в качестве параметров и возвращает ViewResult для этого общего представления.Таким образом, вы можете повторно использовать этот вспомогательный метод и общий вид на всех ваших контроллерах в любое время, когда захотите визуализировать какое-либо другое действие из контекста другого действия.

Конечно, если это просто представление, а не действие, которое вы выполняетехочу вызвать, ответ Марникса правильный.

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