为什么我的动作过滤器没有被调用?

时间:2011-11-10 14:19:53

标签: asp.net-mvc asp.net-mvc-3

代码:

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

当我在返回Home()上调试并逐步执行时,我绕过动作过滤器并直接进入Home()方法。

我是否正确声明了操作过滤器?

4 个答案:

答案 0 :(得分:29)

确保您正在实施

System.Web.Mvc.ActionFilterAttribute

而不是

System.Web.Http.Filters.ActionFilterAttribute

他们都有OnActionExecuting和OnActionExecuted方法,所以它可能有点欺骗。

答案 1 :(得分:2)

也许你没有直接联系方法但是从其他行动中调用编辑动作? 将过滤器放在控制器上,看看会发生什么。

答案 2 :(得分:1)

我也遇到了同样的问题,我只是在OnExecuting方法之前缺少 override 关键字。添加替代关键字后,它开始工作。

答案 3 :(得分:-3)

使用Onexecuting not onExecucuted

 public override void OnActionExecuting(ActionExecutingContext filterContext)