我有我的控制器的基類。在基類的構造函數中,我試圖從TempData填充ViewBag屬性。但是,看起來TempData並未在此處填充,它也不在OnBeginExecute方法中。在控制器執行的哪一點是TempData填充
我需要在基類中填充此ViewBag屬性,因爲所有控制器都需要相同的變量(它是重定向消息)。
在我的基類中可以使用哪種重寫Controller?
我有我的控制器的基類。在基類的構造函數中,我試圖從TempData填充ViewBag屬性。但是,看起來TempData並未在此處填充,它也不在OnBeginExecute方法中。在控制器執行的哪一點是TempData填充
我需要在基類中填充此ViewBag屬性,因爲所有控制器都需要相同的變量(它是重定向消息)。
在我的基類中可以使用哪種重寫Controller?
在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;
}
的TempData以及任何HttpContext的相關的東西是不是在控制器的構造函數可用。您可以從Initialize方法開始使用它們。因此,如果您需要以全局方式爲控制器填充它們,請覆蓋此方法或編寫自定義操作過濾器並用它來裝飾您的控制器:
public class HomeController: Controller
{
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
// now you can access the HttpContext
}
...
}