2011-11-10 24 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

ありがとうございました。 TheFilterAttributeという名前のクラスまたはTheFilterという名前のクラスを宣言する必要がありますか?私はこれが問題かもしれないと思って、それを試みました。しかし、同じ結果。それはOnActionExecutedにステップインしません –

+0

アクションフィルタの最後に '属性'を付けずに試しました。それは問題ではないようです。 –

答えて

2

たぶん、あなたは直接法に達するが、他のアクションから[編集]アクションを呼び出すことはありませんか?onExecutedないOnexecutingを使用しますか
フィルターをコントローラーに取り付け、何が起こるかを確認します。

+0

アクションにカスタムアクションフィルタを適用しようとしていますが、起動されていませんが、コントローラの上に配置すると、ここで私を助けることができますか? –

-2

public override void OnActionExecuting(ActionExecutingContext filterContext) 
22

彼らの両方がOnActionExecutingとOnActionExecutedメソッドを持っているので、それは少し欺くことができますが、

System.Web.Mvc.ActionFilterAttribute 

なく

System.Web.Http.Filters.ActionFilterAttribute 

を実装していることを確認します。

関連する問題