2011-11-10 11 views
6

Kod:Dlaczego mój filtr działania nie jest wywoływany?

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(); 
    } 
} 

Kiedy debugowanie na powrót do domu (krok po kroku) i potem ominąć filtr działania i iść prosto do sposobu Home().

Czy deklaruję poprawność działania filtra?

+0

Odtworzyłem scenariusz dokładnie tak, jak powyżej, a mój filtr akcji został trafiony. Zdaję sobie sprawę, że te informacje nie pomogą rozwiązać twojego problemu, ale pomyślałem, że powinieneś wiedzieć, że twój kod jest poprawny. Inne problemy z konfiguracją mogą być przyczyną problemu. –

+0

Dzięki Nathan. Czy powinienem zadeklarować klasę o nazwie TheFilterAttribute lub o nazwie TheFilter? Myślałem, że to może być problem i próbowałem tego. Jednak taki sam wynik. Nie wchodzi do OnActionExecuted –

+0

Po prostu wypróbowałem go bez "Attribute" na końcu mojego filtra akcji; to nie ma znaczenia. –

Odpowiedz

2

Może nie dotrzeć metodę bezpośrednio ale dzwonić Edycja działania z innymi działaniami?
umieść filtr na kontrolerze i zobacz, co się stanie.

+0

Próbuję zastosować niestandardowy filtr akcji do akcji, ale nie jest on uruchamiany, ale kiedy umieszczasz go nad sterownikiem, możesz mi pomóc? –

-2

Użyj Onexecuting nie onExecuted

public override void OnActionExecuting(ActionExecutingContext filterContext) 
22

Upewnij się, że wdrożenie

System.Web.Mvc.ActionFilterAttribute 

a nie

System.Web.Http.Filters.ActionFilterAttribute 

Obaj mają OnActionExecuting i OnActionExecuted Metody, więc może być trochę mylące.

Powiązane problemy