¿Cómo puedo acceder a una instancia de controlador desde la vista? P.ej. Tengo un HomeController
que luego devuelve mi vista Index
. Dentro de esa vista quiero acceder a la instancia HomeController
que creó la vista. ¿Cómo puedo hacer eso?ASP.NET MVC: Instancia de controlador de acceso de la vista
Respuesta
ViewContext.Controller, y tendrá que echarlo.
<% var homeController = ViewContext.Controller as HomeController; %>
Esto se cubre con unas cuantas arrugas adicionales en la post Asp.Net MVC: How do I get virtual url for the current controller/view?.
EDIT: Esto es para agregar un poco de carne a la recomendación de Mark Seemann de que mantenga la funcionalidad fuera de la vista tanto como sea humanamente posible. Si está utilizando el controlador para ayudar a determinar el marcado de la página representada, le conviene usar el método Html.RenderAction(actionName, controllerName)
. Esta llamada activará la acción como si fuera una solicitud separada e incluirá su vista como parte de la página principal.
Este enfoque ayudará a imponer la separación de preocupaciones porque el método de acción redirigido a puede hacer todo el trabajo pesado con respecto a las reglas de presentación. Tendrá que devolver una Vista parcial para que funcione correctamente dentro de su vista principal.
En mi opinión, debe considerar un diseño donde la vista no necesita saber sobre el controlador. La idea es que el Controlador maneje la solicitud, conjure un Modelo y lo transfiera a la Vista. En ese punto, el trabajo del Controlador está hecho.
Creo que es una indicación de un defecto de diseño si la Vista necesita saber algo sobre el Controlador. ¿Puedes compartir más sobre qué es lo que estás tratando de lograr?
A menudo me parece que cuando se trata de marcos bien diseñados (como el marco MVC), si se siente como que el marco está luchando contra ti, probablemente estés haciendo la tarea de la manera incorrecta. Esto me ha pasado mucho, y dar un paso atrás y preguntarme qué es lo que realmente estoy tratando de lograr a menudo me lleva a nuevas ideas.
+1 para eso. Si se necesitan clases de utilidad, generalmente deben ir al ViewModel o a una entidad completamente separada, ya que el ciclo de vida de los controladores debe terminar con el "retorno". –
Marca: He añadido un poco más a tu argumento en mi propia publicación. +1 –
+1 de mí también. Pensé acerca de esto. Lo que estoy haciendo es que tengo una vista parcial, similar a LogOnUserControl del proyecto de inicio regular para ASP.NET MVC. Muestra un nombre de usuario (pero no proviene del contexto de página/IPrincipal, es personalizado). Mi controlador ya tiene un servicio que es capaz de proporcionar el nombre de usuario, por lo que preferiría tomar la instancia del controlador en lugar de volver a crear una instancia en la vista.No estoy usando el modelo porque me gustaría aprovechar el retorno regular View() y no tener problemas (recuerde, esto es compartido, así que necesitaría una clase base VM, etc. – Alex
- 1. ASP.NET MVC Pasar datos de la vista al controlador
- 2. asp.net acción de controlador de vista parcial MVC
- 3. ASP.NET MVC acción 3 controlador de vista parcial
- 4. Asp.net MVC 3- obtener la instancia de controlador de corriente (no sólo el nombre)
- 5. Asp.Net Mvc - Cómo tener un "controlador" en la vista compartida
- 6. Controlador StructureMap instancia de controlador y controlador nulo en MVC
- 7. Buscar qué controlador ASP.NET MVC en la vista maestra
- 8. Devolver documento PDF de Asp.net controlador MVC
- 9. Deshabilitar condicionalmente el controlador MVC de ASP.NET
- 10. ASP.NET MVC: Controlador simulado.Url.Action
- 11. asp.net controlador genérico mvc
- 12. ASP.Net MVC: Envío de JSON al controlador
- 13. Crear controlador para vista parcial en ASP.NET MVC
- 14. ASP.NET MVC: ¿Puede una vista parcial tener un controlador?
- 15. ASP.NET MVC: el motor de vista
- 16. MVC envío de datos a la vista de Controlador
- 17. Spring 3.0 MVC MVC: etiqueta vista-controlador
- 18. ASP.NET MVC: reutilización de la vista mediante dos acciones de controlador
- 19. Controlador de prueba de unidad ASP.NET MVC con HttpContext
- 20. ASP.net MVC controlador de ruta personalizada/restricción
- 21. ASP.NET MVC controlador Constructor Llamado antes de la autenticación
- 22. Diseño de acciones del controlador ASP.NET MVC
- 23. Acceso a las propiedades del controlador de vista principal (personalizado)
- 24. Ciclo de vida del controlador ASP.NET MVC
- 25. ASP.net MVC: ¿cómo accede la vista al modelo?
- 26. Restringir el acceso a un controlador específico de la dirección IP en ASP.NET MVC Beta
- 27. Las teclas de acceso en ASP.NET MVC
- 28. ASP.NET MVC 3 Vista parcial en la página de diseño
- 29. Retorno JSON o vista desde el controlador MVC de Spring
- 30. ASP.NET MVC Controlador Dependencias (StructureMap)
¿Cómo es que la respuesta a esto no es "no se supone que debes hacerlo" (c.f. https://stackoverflow.com/q/9562214/1739000)? –