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

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

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

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

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

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

7 ответов

Решение

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

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

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

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

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

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

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

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

var controller = DependencyResolver.Current.GetService<ControllerB>();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext, 
controller);
Другие вопросы по тегам