Mostrar una vista desde otro controlador en ASP.NET MVC
¿Es posible mostrar una vista desde otro controlador?
Digamos, por ejemplo, que tengo una vista CategoriesController
y una Category/NotFound.aspx
. Mientras esté en el CategoriesController
, puedo regresar fácilmente View("NotFound")
.
Ahora digamos que tengo una ProductsController
acción y una vista para agregar un producto. Sin embargo, esta acción requiere que tengamos una Categoría a la que agregar el Producto. Por ejemplo, Products/Add/?catid=10
.
Si no puedo encontrar la categoría basada en catid
, quiero mostrar la NotFound
vista desde el controlador de Categorías en lugar de crear una CategoryNotFound
vista en el controlador de Productos.
¿Es esto posible o estoy estructurando las cosas de forma incorrecta? ¿Existe una forma correcta de hacer esto?
Sí. De forma predeterminada, ASP.NET MVC registra primero \Views\[Controller_Dir]\
, pero después de eso, si no encuentra la vista, la registra \Views\Shared
.
El directorio compartido existe específicamente para compartir Vistas entre múltiples controladores. Simplemente agregue su Vista al subdirectorio Compartido y listo.
Si lo hace, return View("~/Views/Wherever/SomeDir/MyView.aspx")
puede devolver cualquier vista que desee.
Puedes usar:
return View("../Category/NotFound", model);
Fue probado en ASP.NET MVC 3, pero también debería funcionar en ASP.NET MVC 2.
Si es posible. Devuelve un RedirectToAction()
método como este:
return RedirectToAction("ActionOrViewName", "ControllerName");