1

コントローラーの基本クラスがあります。基本クラスのコンストラクターで、TempData から ViewBag プロパティを設定しようとしていました。ただし、TempData はその時点では設定されておらず、OnBeginExecute メソッドにも設定されていないようです。

すべてのコントローラーが同じ変数を必要とするため、この ViewBag プロパティを基本クラスに設定する必要があります (これはリダイレクト メッセージです)。

これを行うために、基本クラスの Controller のどのオーバーライドを使用できますか?

4

2 に答える 2

5

TempData および HttpContext 関連のものは、コントローラー コンストラクターでは使用できません。Initializeメソッドから使​​用できます。したがって、コントローラーに対してグローバルな方法でそれらを設定する必要がある場合は、このメソッドをオーバーライドするか、カスタム アクション フィルターを作成してコントローラーを装飾します。

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

    ...
}
于 2012-09-11T04:20:45.103 に答える
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;
}
于 2012-09-11T03:41:28.613 に答える