2009-07-31 8 views
33

Tengo un SuperController que se heredará de todos los controladores. En el constructor, intento poblar ViewData usando ControllerName y ActionName.¿Obtiene ControllerName y ActionName y completa ViewData en la página maestra?

No voy a pasar el ControllerName y el ActionName como ViewData. Tengo un método que necesita ControllerName y ActionName y necesito pasar el valor de retorno del método como ViewData.

¿Cómo puedo hacer eso?

+0

para conseguir la acción, los nombres del controlador echar vistazo a este http://stackoverflow.com/a/31749391/4293929 – MstfAsan

Respuesta

3

Suponiendo que estoy leyendo tu post correctamente y no está tratando de acceder a los nombres de controlador/acción en la vista, pero en su lugar tratando de hacer algo con ellos, y poner el resultado en viewdata:

No puede hacerlo en el constructor porque el contexto aún no se ha creado. Es necesario reemplazar el método de inicialización: (. Tenga en cuenta que usted podría pasar en tan sólo el ControllerContext.RouteData a su función y se deja escoger los valores que necesita)

protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
    { 
     base.Initialize(requestContext); 

     //here the routedata is available 
     ViewData["controller_name"] = (ControllerContext.RouteData.Values["Controller"]; 
    } 

1

que necesitaba para llegar hasta ellos un montón de puntos de vista, y lo llegué desde un ángulo ligeramente diferente: escribí algunos métodos de extensión para HtmlHelper para dar el actual ControllerName y ActionName. Es un poco más fácil de manejar ya que no tiene que preocuparse por meterse en la bolsa ViewData [] o inyectar cosas en lugares apropiados.

+0

Creo que tales métodos de extensión serían más adecuados para UrlHelper, en lugar de HtmlHelper. Esos dos valores realmente no tienen nada que ver con HTML. –

+0

Buen punto: creo que la implementación podría incluso haber sido refactorizada de esa manera. En cualquier caso, la teoría es más o menos la misma: extráigala en lugar de insertarla. –

6

Prueba esto:

RouteData.Values.First().Value.ToString() 
+0

Si utiliza el enrutamiento personalizado (por ejemplo, "idioma/controlador/acción"), "controlador" puede no ser la primera entrada. –

+0

eche un vistazo a este http://stackoverflow.com/a/31749391/4293929 – MstfAsan

Cuestiones relacionadas