Отобразить представление с другого контроллера в ASP.NET MVC

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

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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

Да, это возможно. Верните метод RedirectToAction() следующим образом:

return RedirectToAction("ActionOrViewName", "ControllerName");

Ответ 5

Да, вы можете. Верните действие, подобное этому:

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

Пример:

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

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

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

RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees", new {id = id.ToString(), viewtype = "extended" );

Ответ 6

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