控制器执行的哪一点是TempData填充的

时间:2012-09-11 03:05:55

标签: asp.net-mvc asp.net-mvc-3 razor

我的控制器有一个基类。在基类的构造函数中,我试图从TempData填充ViewBag属性。但是,似乎TempData在此时没有填充,也不在OnBeginExecute方法中。

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

我可以使用哪种覆盖基类中的Controller来执行此操作?

2 个答案:

答案 0 :(得分:5)

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

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

    ...
}

答案 1 :(得分: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;
}