¿Cómo se obtiene el nombre del área actual en la vista o controlador?
¿Hay algo parecido ViewContext.RouteData.Values["controller"]
a las áreas?
c#
asp.net-mvc
razor
usuario202448
fuente
fuente
ASP.NET Core 1.0
lugar deMVC6
... :-)fuente
Puede obtenerlo del controlador usando:
fuente
En ASP.NET Core 1.0, el valor se encuentra en
ViewContext.RouteData.Values ["área"];
fuente
pageModel.RouteData.Values.TryGetValue("area", out object area)
debería usarse en su lugar)Acabo de escribir una entrada de registro ab sobre esto , puede visitarla para obtener más detalles, pero mi respuesta fue crear un Método de extensión, que se muestra a continuación.
El factor clave fue que extrajo el Área MVC de .DataTokens y el controlador / acción de .Values de RouteData.
Luego puede implementarlo de la siguiente manera:
fuente
area
token en el,Values
pero necesitaba buscar en elDataTokens
... no tengo idea de por qué.Creé un método de extensión para
RouteData
que devuelva el nombre del área actual.Dado que
RouteData
está disponible en ambosControllerContext
yViewContext
se puede acceder en su controlador y vistas.También es muy fácil de probar:
No es necesario verificar si
RouteData.DataTokens
es nulo ya que esto siempre se inicializa internamente.fuente
MVC Futures tiene un método AreaHelpers.GetAreaName (). Sin embargo, tenga cuidado si está utilizando este método. El uso del área actual para tomar decisiones de tiempo de ejecución sobre su aplicación podría conducir a un código difícil de depurar o inseguro.
fuente
this.GetName()
y para el uso del Método actualMethodBase.GetCurrentMethod().Name
Sé que esto es antiguo, pero también, cuando está en un filtro como ActionFilter, el contexto no le proporciona fácilmente la información del área.
Se puede encontrar en el siguiente código:
Por lo tanto, el filterContext se pasa en la anulación y se encuentra el RouteData correcto en RequestContext. Hay un RoutData en el nivel Base, pero los DataTokens NO tienen el área en su diccionario.
fuente
Para obtener el nombre del área en la vista, en ASP.NET Core MVC 2.1:
fuente
Obtener el nombre del área en Vista (.NET Core 2.2):
fuente
Sé que esta es una publicación muy antigua, pero podemos usar la propiedad de valores exactamente de la misma manera que DataTokens
Url.RequestContext.RouteData.Values ["action"] funcionó para mí.
fuente
No sé por qué, pero la respuesta aceptada no funciona. Devuelve nulo con, por ejemplo, (tal vez sobre mvc, uso .net core)
Siempre depuro la variable y obtengo datos de ella.
Prueba esto. Esto funciona para mi
Ejemplo lógico detallado
fuente