2010-11-05 6 views

Respuesta

15

Se podría escribir una costumbre action filter attribute:

public class CustomFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // This method is executed before calling the action 
     // and here you have access to the route data: 
     var foo = filterContext.RouteData.Values["foo"]; 
     // TODO: use the foo route value to perform some action 

     base.OnActionExecuting(filterContext); 
    } 
} 

Y entonces usted puede decorar su controlador de base con este atributo personalizado. Y aquí hay un blog post que ilustra una implementación de muestra de dicho filtro.

+1

En MVC3 no lo hace en el controlador base: soporte para filtros globales (MVC y ya se instala uno en 'Global.asax.cs') . – Richard

+0

@Richard, claro, pero para cuando respondí esta pregunta, MVC 3 aún no se había publicado :-) También no estaba etiquetado con MVC 3. –

+0

Lo sé, pero es * ahora * cierto (debería haber añadido un "ahora" allí) y recuerda que SO es parte wiki. – Richard

4

Si desea aplicar la cultura en cada acción, puede crear un controlador base y anular el método OnActionExecuting.

+0

Eso también funciona. Supongo que se ejecuta al mismo tiempo que el atributo. Interesante cómo ofrece ambas opciones. –

1

Si desea agregar el filtro a todos los controladores, no solo seleccionarlos, puede agregarlo a los "filtros globales". Esto se hace en Application_Start() en su archivo Global.asax.cs:

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 

    // Register global filter 
    GlobalFilters.Filters.Add(new CustomFilterAttribute()); // ADDED 

    RegisterGlobalFilters(GlobalFilters.Filters); 
    RegisterRoutes(RouteTable.Routes); 
} 
Cuestiones relacionadas