2011-11-10 13 views
6

El código:¿Por qué no se llama mi filtro de acción?

public class TheFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName; 
    } 
} 

public class NotesController : BaseController 
{ 
    [TheFilter] 
    [HttpPost] 
    public ActionResult Edit(EditViewModel viewModel) 
    { 
     viewModel.Note.Modified = DateTime.Now; 
     viewModel.Note.ModifiedBy = User.Identity.Name; 
     var noteTable = StorageHelper.GetTable<Note>(viewModel.PageMeta.DataSourceID); 
     noteTable.AddOrUpdate(viewModel.Note); 
     return Home(); 
    } 
} 

Cuando elimino errores en la declaración de Inicio() y desplazarse por entonces evitar el filtro de acción e ir directamente al método de Inicio().

¿Estoy declarando el filtro de acción correctamente?

+0

He recreado el escenario exactamente como lo tienes arriba y mi filtro de acción es golpeado. Me doy cuenta de que esta información no hace nada para resolver su problema, pero pensé que debería saber que su código es correcto. Alguna otra forma de configuración puede estar causando el problema que estás experimentando. –

+0

Gracias Nathan. ¿Debo declarar la clase con el nombre TheFilterAttribute o con el nombre TheFilter? Pensé que esto podría ser un problema y lo intenté. Sin embargo, el mismo resultado. No entra en el OnActionExecuted –

+0

Lo intenté sin el 'Atributo' al final de mi filtro de acción; no parece importar. –

Respuesta

2

Tal vez usted no alcanza el método directamente, sino que llama a la acción Editar desde otra acción?
ponga el filtro en el controlador y vea qué pasa.

+0

Estoy tratando de aplicar un filtro de acción personalizado en una acción, pero no se dispara, pero al ponerlo por encima del controlador, ¿me pueden ayudar aquí? –

-2

Uso del Onexecuting no onExecuted

public override void OnActionExecuting(ActionExecutingContext filterContext) 
22

asegurarse de que está la implementación de

System.Web.Mvc.ActionFilterAttribute 

y no

System.Web.Http.Filters.ActionFilterAttribute 

Ambos tienen OnActionExecuting y Métodos OnActionExecuted, por lo que puede ser un poco engañoso.

Cuestiones relacionadas