Отобразить представление с другого контроллера в 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 формате
ваш клиентский код может принять этот возвращенный результат и поместить его туда, где вы хотите, на свою страницу...