2012-09-11 25 views
1

我有我的控制器的基类。在基类的构造函数中,我试图从TempData填充ViewBag属性。但是,看起来TempData并未在此处填充,它也不在OnBeginExecute方法中。在控制器执行的哪一点是TempData填充

我需要在基类中填充此ViewBag属性,因为所有控制器都需要相同的变量(它是重定向消息)。

在我的基类中可以使用哪种重写Controller?

回答

2

BeginExecuteCore看看:

protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state) 
{ 
    // TempData is not populated here 
    var result = base.BeginExecuteCore(callback, state); 
    // TempData is populated here 

    return result; 
} 
5

的TempData以及任何HttpContext的相关的东西是不是在控制器的构造函数可用。您可以从Initialize方法开始使用它们。因此,如果您需要以全局方式为控制器填充它们,请覆盖此方法或编写自定义操作过滤器并用它来装饰您的控制器:

public class HomeController: Controller 
{ 
    protected override void Initialize(RequestContext requestContext) 
    { 
     base.Initialize(requestContext); 
     // now you can access the HttpContext 
    } 

    ... 
}