Отображать представление с другого контроллера в ASP.NET MVC
-
22-08-2019 - |
Вопрос
Возможно ли отобразить представление с другого контроллера?
Скажем, например, у меня есть CategoriesController
и a Category/NotFound.aspx
Вид.Находясь в CategoriesController
, Я могу легко вернуться View("NotFound")
.
Теперь допустим, что у меня есть ProductsController
а также действие и представление для добавления продукта.Однако для этого действия требуется, чтобы у нас была Категория, в которую можно добавить Товар.Например, Products/Add/?catid=10
.
Если я не могу найти Категорию, основанную на catid
, Я хочу показать NotFound
просмотр из контроллера категорий вместо создания CategoryNotFound
просмотр в разделе "Контроллер продуктов".
Возможно ли это, или я неправильно структурирую ситуацию?Есть ли хороший способ сделать это?
Решение
ДА.По умолчанию ASP.NET MVC сначала проверяет в \Views\[Controller_Dir]\
, но после этого, если он не находит представление, он проверяет \Views\Shared
.
Общий каталог предназначен специально для совместного использования представлений на нескольких контроллерах.Просто добавьте свое представление в общий подкаталог, и все готово.
Если вы это сделаете return View("~/Views/Wherever/SomeDir/MyView.aspx")
Вы можете вернуть любой вид, который пожелаете.
Другие советы
Вы можете использовать:
return View("../Category/NotFound", model);
Он был протестирован в ASP.NET MVC 3, но также должен работать в ASP.NET MVC 2.
Да, это возможно.Вернуть a RedirectToAction()
метод, подобный этому:
return RedirectToAction("ActionOrViewName", "ControllerName");
Вы пробовали RedirectToAction
?
Да, ты можешь.Верните действие, подобное этому :
return RedirectToAction("View", "Name of Controller");
Пример:
RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees");
Такой подход вызовет метод GET
Также вы могли бы передавать значения действию следующим образом:
RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees", new {id = id.ToString(), viewtype = "extended" );
Вы также можете вызвать любой контроллер из JavaScript/jQuery - jQuery - запрос.Допустим, у вас есть контроллер, возвращающий 404 или какой-либо другой usercontrol / page.Затем, при выполнении некоторого действия из вашего клиентского кода, вы можете вызвать некоторый адрес, который запустит ваш контроллер и вернет результат в HTML форматировать ваш клиентский код может взять этот возвращенный результат и поместить его в любое место вашей страницы, куда вы захотите...
С помощью этого кода вы можете получить любой контроллер:
var controller = DependencyResolver.Current.GetService<ControllerB>();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext,
controller);