2009-09-16 12 views

Odpowiedz

4

Nie. Najłatwiejszym sposobem jest napisanie wspólnej klasy bazowej, która obejmuje wszystkie podklasy typów kontrolerów, a następnie przyklejenie filtru akcji do tej klasy bazowej lub zastąpienie jej metodą OnActionExecuting().

+0

... oczywiście wszystko zależy od tego, co trzeba zrobić. –

+2

Należy pamiętać, że MVC 3 dodał obsługę globalnych filtrów –

12

Asp.net MVC3 dodano wsparcie dla Global Filters

z bloga ScottGu:

ASP.NET MVC wspiera zdolność deklaratywnie Zastosuj „przekrojowy” logiki za pomocą mechanizmu o nazwie „Filtry”. Można określić filtry na kontrolerach i metody działania dziś użyciem składni atrybutu tak:

image

Deweloperzy często chcesz zastosować jakąś logikę filtra we wszystkich kontrolerów w aplikacji. ASP.NET MVC 3 umożliwia teraz określenie, że filtr powinien obowiązywać globalnie dla wszystkich kontrolerów w aplikacji. Możesz teraz to zrobić, dodając go do kolekcji GlobalFilters. RegisterGlobalFilters() metoda jest obecnie zawarte w szablonie domyślnym klasy Global.asax aby zapewnić wygodne miejsce, aby to zrobić (to jest wtedy nazywana metodą Application_Start()):

image

Uchwała logika filtr w MVC 3 elastyczny, aby można było skonfigurować filtr globalny, który jest stosowany warunkowo tylko wtedy, gdy spełnione są określone warunki (na przykład: debugowanie jest włączone lub jeśli żądanie używa określonego czasownika http itp.). Filtry można również teraz rozwiązać za pomocą kontenera Dependency Injection (DI).

2

Tworzenie jedna klasa, która implementuje IActionFilter i/lub IResultFilter:

public class FilterAllActions : IActionFilter, IResultFilter 
{  
    public void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     throw new System.NotImplementedException(); 
    } 

    public void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     throw new System.NotImplementedException(); 
    } 

    public void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     throw new System.NotImplementedException(); 
    } 

    public void OnResultExecuted(ResultExecutedContext filterContext) 
    { 
     throw new System.NotImplementedException(); 
    } 
} 

i zarejestrować go na Global.asax

protected void Application_Start() 
    { 
     //... 
     RegisterGlobalFilters(GlobalFilters.Filters); 
     //... 
    } 

    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new FilterAllActions()); 
    } 
Powiązane problemy