在动作被调用之前发生的ASP.NET MVC事件?
问题描述:
我想设置的Thread.CurrentCulture
基于一些路由数据的价值,但我不能找到一个事件挂钩到计算和操作方法被调用之前之后的路线将触发。在动作被调用之前发生的ASP.NET MVC事件?
任何想法?
答
你可以写一个自定义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表示这种过滤器的一个样本实现。
答
如果你想申请的每一个动作的文化,你可以创建一个基本的控制器,并覆盖OnActionExecuting
方法。
+0
这工作太出来。我猜它是在属性同时被执行的。有趣的是它如何提供两种选择。 – 2010-11-05 07:34:30
答
如果你想过滤器添加到所有控制器,不只是选择的搜索,你可以将它添加到“全局过滤器”。你在你的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);
}
在MVC3你没有在主控制器:对全局过滤器支持(和MVC已经安装了一个在'Global.asax.cs') 。 – Richard 2011-03-02 07:47:45
@Richard,确保但我回答了这个问题MVC 3的时间尚未公布:-)此外,它并没有标记MVC 3 – 2011-03-02 07:51:55
我知道 - 但它是* *现在真正的(我应该有加一个“现在”在那里),记住SO是部分维基。 – Richard 2011-03-02 08:53:27