Показать представление из другого контроллера в ASP.NET MVC - PullRequest
230 голосов
/ 19 мая 2009

Можно ли отобразить вид с другого контроллера?

Скажем, например, у меня есть CategoriesController и Category/NotFound.aspx представление. Находясь в CategoriesController, я могу легко вернуть View("NotFound").

Теперь скажите, что у меня есть ProductsController, а также действие и представление для добавления продукта. Тем не менее, это действие требует, чтобы у нас была Категория для добавления Продукта. Например, Products/Add/?catid=10.

Если мне не удается найти категорию на основе catid, я хочу показать представление NotFound с контроллера категорий вместо создания представления CategoryNotFound под контроллером Products.

Возможно ли это, или я неправильно структурирую вещи? Есть ли хороший способ сделать это?

Ответы [ 7 ]

259 голосов
/ 19 мая 2009

Да. По умолчанию ASP.NET MVC сначала проверяет \Views\[Controller_Dir]\, но после этого, если не находит представление, проверяет \Views\Shared.

Общий каталог предназначен для совместного использования представлений несколькими контроллерами. Просто добавьте свой View в подкаталог Shared, и все готово.

Если вы делаете return View("~/Views/Wherever/SomeDir/MyView.aspx") Вы можете вернуть любой вид, который захотите.

157 голосов
/ 05 декабря 2010

Вы можете использовать:

return View("../Category/NotFound", model);

Он был протестирован в ASP.NET MVC 3, но также должен работать в ASP.NET MVC 2.

44 голосов
/ 28 августа 2014

Да, это возможно. Вернуть RedirectToAction() метод, подобный этому:

return RedirectToAction("ActionOrViewName", "ControllerName");
33 голосов
/ 24 февраля 2012

Вы пробовали RedirectToAction?

17 голосов
/ 16 апреля 2015

Да, вы можете. Возвратите действие как это:

return RedirectToAction("View", "Name of Controller");

Пример:

RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees");

Этот подход вызовет метод GET

Также вы можете передавать значения в действие следующим образом:

RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees", new {id = id.ToString(), viewtype = "extended" );
5 голосов
/ 20 мая 2009

Вы также можете вызвать любой контроллер из JavaScript / jQuery . Скажем, у вас есть контроллер, возвращающий 404, или какой-то другой пользовательский элемент управления / страницу. Затем, по какому-либо действию, из вашего клиентского кода вы можете вызвать какой-нибудь адрес, который запустит ваш контроллер, и вернуть результат в формате HTML Ваш код клиента может взять этот возвращенный результат и поместить его туда, куда вы хотите, на вашу страницу ...

0 голосов
/ 07 сентября 2018

С этим кодом вы можете получить любой контроллер:

var controller = DependencyResolver.Current.GetService<ControllerB>();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext, 
controller);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...