2011-11-10 65 views
6

代碼:爲什麼我的動作過濾器不被調用?

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

當我調試在回國()和步然後我繞過行動過濾器和直接進入主頁()方法。

我是否正確地聲明瞭操作篩選器?

+0

我完全按照上面的方式重新創建場景,並且我的動作過濾器被擊中。我意識到這些信息沒有解決你的問題,但我認爲你應該知道你的代碼是正確的。其他某種形式的配置可能會導致您遇到的問題。 –

+0

謝謝Nathan。我應該用名稱TheFilterAttribute還是名稱TheFilter來聲明類?我認爲這可能是一個問題,並試圖。然而同樣的結果。它沒有進入OnActionExecuted –

+0

剛剛嘗試過,沒有在我的動作過濾器的末尾的'屬性';這似乎並不重要。 –

回答

2

也許你不直接到達方法,但其他動作調用編輯操作?
將過濾器放在控制器上,看看會發生什麼。

+0

我正在嘗試對某個操作應用自定義操作過濾器,但它並未被解僱,但當它放在控制器上方時,您能幫我解決問題嗎? –

-2

使用Onexecuting不onExecuted

public override void OnActionExecuting(ActionExecutingContext filterContext) 
22

確保您實現

System.Web.Mvc.ActionFilterAttribute 

,而不是

System.Web.Http.Filters.ActionFilterAttribute 

他們都有OnActionExecuting和OnActionExecuted方法,所以它可以是一個有點欺騙。

相關問題