2011-11-10 25 views
6

Mã:Tại sao bộ lọc hành động của tôi không được gọi?

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

Khi tôi gỡ lỗi khi trở về Trang chủ() và bước qua sau đó tôi bỏ qua các bộ lọc hành động và đi thẳng đến phương pháp Trang chủ().

Tôi có khai báo đúng bộ lọc hành động không?

+0

Tôi đã tạo lại kịch bản chính xác như bạn đã làm ở trên và bộ lọc hành động của tôi bị nhấn. Tôi nhận ra thông tin này không có gì để giải quyết vấn đề của bạn, nhưng tôi nghĩ bạn nên biết rằng mã của bạn là chính xác. Một số hình thức cấu hình khác có thể gây ra sự cố bạn đang gặp phải. –

+0

Cảm ơn Nathan. Tôi có nên khai báo lớp với tên TheFilterAttribute hoặc với tên TheFilter? Tôi nghĩ rằng đây có thể là một vấn đề và đã thử điều đó. Tuy nhiên kết quả tương tự. Nó không bước vào OnActionExecuted –

+0

Chỉ cần thử nó mà không có 'Thuộc tính' vào cuối bộ lọc hành động của tôi; nó không có vẻ quan trọng. –

Trả lời

2

Có lẽ bạn không đạt được phương pháp trực tiếp nhưng gọi Chỉnh sửa hành động từ hành động khác?
đặt bộ lọc trên bộ điều khiển và xem điều gì sẽ xảy ra.

+0

Tôi đang cố gắng áp dụng một bộ lọc hành động tùy chỉnh trên một hành động nhưng nó không phải là nhận được bắn nhưng khi đặt nó trên bộ điều khiển nó là u có thể giúp tôi ra khỏi đây? –

-2

Sử dụng Onexecuting không onExecuted

public override void OnActionExecuting(ActionExecutingContext filterContext) 
22

Hãy chắc chắn rằng bạn đang thực hiện

System.Web.Mvc.ActionFilterAttribute 

và không

System.Web.Http.Filters.ActionFilterAttribute 

Cả hai đều có OnActionExecuting và phương pháp OnActionExecuted, vì vậy nó có thể là một lừa dối chút.

Các vấn đề liên quan