我的控制器有一个基类。在基类的构造函数中,我试图从 TempData 填充 ViewBag 属性。但是,此时似乎没有填充 TempData,也没有在 OnBeginExecute 方法中填充。
我需要在基类中填充这个 ViewBag 属性,因为所有控制器都需要相同的变量(这是一个重定向消息)。
我可以使用基类中的哪个控制器覆盖来执行此操作?
我的控制器有一个基类。在基类的构造函数中,我试图从 TempData 填充 ViewBag 属性。但是,此时似乎没有填充 TempData,也没有在 OnBeginExecute 方法中填充。
我需要在基类中填充这个 ViewBag 属性,因为所有控制器都需要相同的变量(这是一个重定向消息)。
我可以使用基类中的哪个控制器覆盖来执行此操作?
TempData 以及任何与 HttpContext 相关的东西在控制器构造函数中不可用。您可以从Initialize方法开始使用它们。因此,如果您需要以全局方式为控制器填充它们,请覆盖此方法或编写自定义操作过滤器并用它装饰您的控制器:
public class HomeController: Controller
{
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
// now you can access the HttpContext
}
...
}
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;
}