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

StackOverflow https://stackoverflow.com/questions/879852

Вопрос

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

Скажем, например, у меня есть 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top