2010-11-05 26 views

Trả lời

15

Bạn có thể viết một tùy chỉnh action filter attribute:

public class CustomFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // This method is executed before calling the action 
     // and here you have access to the route data: 
     var foo = filterContext.RouteData.Values["foo"]; 
     // TODO: use the foo route value to perform some action 

     base.OnActionExecuting(filterContext); 
    } 
} 

Và sau đó bạn có thể trang trí điều khiển cơ sở của bạn với thuộc tính tùy chỉnh này. Và đây là một số blog post minh họa việc triển khai mẫu của bộ lọc đó.

+1

Trong MVC3 bạn không trong bộ điều khiển cơ sở: hỗ trợ cho các bộ lọc toàn cầu (và MVC đã cài đặt một trong 'Global.asax.cs') . – Richard

+0

@Richard, chắc chắn nhưng do thời gian tôi trả lời câu hỏi này MVC 3 chưa được phát hành :-) Ngoài ra nó không được gắn thẻ với MVC 3. –

+0

Tôi biết - nhưng nó là * bây giờ * true (Tôi nên có thêm một "bây giờ" trong đó) và nhớ SO là một phần wiki. – Richard

4

Nếu bạn muốn áp dụng văn hóa trên mọi hành động, bạn có thể tạo bộ điều khiển cơ sở và ghi đè phương thức OnActionExecuting.

+0

Điều đó làm việc quá. Tôi đoán nó được thực thi cùng lúc với thuộc tính. Thú vị như thế nào nó cung cấp cả hai lựa chọn. –

1

Nếu bạn muốn thêm bộ lọc vào tất cả các bộ điều khiển, không chỉ chọn bộ lọc, bạn có thể thêm bộ lọc đó vào "bộ lọc chung". Bạn làm điều này trong Application_Start() trong tập tin Global.asax.cs của bạn:

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 

    // Register global filter 
    GlobalFilters.Filters.Add(new CustomFilterAttribute()); // ADDED 

    RegisterGlobalFilters(GlobalFilters.Filters); 
    RegisterRoutes(RouteTable.Routes); 
} 
Các vấn đề liên quan