Para nuestra aplicación web, necesito guardar el orden de los elementos recuperados y mostrados según la vista, o para ser precisos, el controlador y la acción que generó la vista (y la identificación del usuario, por supuesto, pero ese no es el punto aquí).
En lugar de dar un identificador yo mismo en cada acción del controlador (para usarlo para una clasificación dependiente de la vista de las salidas DB), pensé que sería más seguro y fácil crear este identificador automáticamente desde el controlador y el método de acción que obtiene llamado desde.
¿Cómo puedo obtener el nombre del controlador y la acción desde el método de acción en un controlador? ¿O necesito reflexión para eso? Supongo que es bastante fácil, gracias de antemano!
c#
asp.net-mvc
controller
action
Alex
fuente
fuente
Route
atributo en el método de acción que recopilo? Además, ¿también es posible cambiar el nombre de los controladores?Respuestas:
fuente
Aquí hay algunos métodos de extensión para obtener esa información (también incluye la ID):
Uso:
fuente
Puede ser útil Necesitaba la acción en el constructor del controlador, y aparece en este punto del ciclo de vida de MVC,
this
no se ha inicializado, yControllerContext = null
. En lugar de profundizar en el ciclo de vida de MVC y encontrar el nombre de función apropiado para anular, acabo de encontrar la acción en elRequestContext.RouteData
.Pero para hacerlo, como con cualquier
HttpContext
uso relacionado en el constructor, debe especificar el espacio de nombres completo, porquethis.HttpContext
tampoco se ha inicializado. Afortunadamente, parece queSystem.Web.HttpContext.Current
es estático.NOTA: probablemente no sea la forma más compatible de acceder a todas las propiedades en HttpContext, pero para RequestContext y Session parece funcionar bien en mi aplicación.
fuente
fuente
fuente
Esto es lo que tengo hasta ahora:
fuente
Aquí está la respuesta más simple y práctica para obtener un nombre:
O
Código de pruebas anteriores con asp.net mvc 5.
fuente
Agregue esto a su controlador base dentro del método GetDefaults ()
Implemente sus controladores a Basecontroller
Agregue una vista parcial _Breadcrumb.cshtml y agréguela en todas las páginas requeridas con @ Html.Partial ("_ Breadcrumb")
_Breadcrumb.cshtml
fuente
filterContext
variable desde dentroGetDefaults()
?Puede obtener el nombre del controlador o el nombre de la acción de la acción como cualquier variable. Son simplemente especiales (controlador y acción) y ya están definidos, por lo que no necesita hacer nada especial para obtenerlos, excepto decirle que los necesita.
O puede incluir el controlador, la acción en sus modelos para obtener dos de ellos y sus datos personalizados.
fuente
Esto parece funcionar bien para mí (hasta ahora), también funciona si está utilizando el enrutamiento de atributos.
fuente
Para eliminar la necesidad de
ToString()
usar la llamadafuente
string actionName = this.ControllerContext.RouteData.Values ["action"]. ToString ();
string controllerName = this.ControllerContext.RouteData.Values ["controller"]. ToString ();
fuente
¿Por qué no tener algo más simple?
Simplemente llame
Request.Path
, devolverá una cadena separada por "/"y luego puede usar
.Split('/')[1]
para obtener el nombre del controlador.fuente
http://www.example.com/sites/site1/controllerA/actionB/
. MVC proporciona un montón de API para el enrutamiento, entonces, ¿por qué necesita analizar (nuevamente) las URL?controller/action