Quería establecer una clase CSS en mi página maestra, que depende del controlador y la acción actuales. Puedo acceder al controlador actual a través de ViewContext.Controller.GetType().Name
, pero ¿cómo obtengo la acción actual (por ejemplo Index
, Show
etc.)?
c#
asp.net-mvc
buggs
fuente
fuente
En el RC también puede extraer datos de ruta como el nombre del método de acción como este
Actualización para MVC 3
Actualización para MVC 4
Actualización para MVC 4.5
fuente
ViewContext.Controller.ValueProvider.GetValue("action").RawValue
+ variacionesPara obtener la identificación actual en una vista:
Para obtener el controlador actual:
fuente
ViewContext.RouteData.Values.ContainsKey(<key>)
primero.Sé que esta es una pregunta anterior, pero la vi y pensé que podría estar interesado en una versión alternativa que dejar que su vista maneje la recuperación de los datos que necesita para hacer su trabajo.
Una manera más fácil en mi opinión sería anular el método OnActionExecuting . Se le pasa el ActionExecutingContext que contiene el miembro ActionDescriptor que puede usar para obtener la información que está buscando, que es ActionName y también puede comunicarse con ControllerDescriptor y contiene ControllerName.
Espero que esto ayude. En todo caso, al menos mostrará una alternativa para cualquier otra persona que surja de su pregunta.
fuente
Vi diferentes respuestas y se me ocurrió un ayudante de clase:
Entonces, en View (o master / layout) puede usarlo así (sintaxis Razor):
Espero eso ayude.
fuente
Puede obtener estos datos de RouteData de un ViewContext
fuente
En MVC, debe proporcionar a la Vista todos los datos, no permitir que la Vista recopile sus propios datos, por lo que lo que puede hacer es establecer la clase CSS en la acción de su controlador.
y seleccione este valor de su ViewData en su Vista
fuente
Yo voto por este 2:
y
Puede recuperar el nombre físico de la vista actual y la acción que lo activó. Puede ser útil en páginas parciales * .acmx para determinar el contenedor del host.
fuente
Estoy usando ASP.NET MVC 4, y esto es lo que funcionó para mí:
fuente
Extendiendo la respuesta de Dale Ragan , su ejemplo para la reutilización, cree una clase ApplicationController que se derive de Controller y, a su vez, haga que todos sus otros controladores se deriven de esa clase ApplicationController en lugar de Controller.
Ejemplo:
En su nuevo ApplicationController, cree una propiedad llamada ExecutingAction con esta firma:
Y luego, en el método OnActionExecuting (de la respuesta de Dale Ragan), simplemente asigne el ActionDescriptor a esta propiedad y podrá acceder a él cuando lo necesite en cualquiera de sus controladores.
fuente
Anular esta función en su controlador
fuente