2010-11-05 31 views

回答

15

你可以写一个自定义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); 
    } 
} 

然后你可以用这个自定义属性装饰你的基本控制器。而这里的一个blog post表示这种过滤器的一个样本实现。

+1

在MVC3你没有在主控制器:对全局过滤器支持(和MVC已经安装了一个在'Global.asax.cs') 。 – Richard 2011-03-02 07:47:45

+0

@Richard,确保但我回答了这个问题MVC 3的时间尚未公布:-)此外,它并没有标记MVC 3 – 2011-03-02 07:51:55

+0

我知道 - 但它是* *现在真正的(我应该有加一个“现在”在那里),记住SO是部分维基。 – Richard 2011-03-02 08:53:27

4

如果你想申请的每一个动作的文化,你可以创建一个基本的控制器,并覆盖OnActionExecuting方法。

+0

这工作太出来。我猜它是在属性同时被执行的。有趣的是它如何提供两种选择。 – 2010-11-05 07:34:30

1

如果你想过滤器添加到所有控制器,不只是选择的搜索,你可以将它添加到“全局过滤器”。你在你的Global.asax.cs文件,这样做在Application_Start()

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

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

    RegisterGlobalFilters(GlobalFilters.Filters); 
    RegisterRoutes(RouteTable.Routes); 
} 
相关问题