6

次のシナリオについて、ご意見とより良い提案をお聞かせください。

私は、何らかの仕事をして何らかの値を出すカスタム ActionFilter を定義しました。その値をコントローラーのアクションとモデルで使用したいと思います。

これで、TempData を使用してこの値を ActionFilter から任意のコントローラー アクション メソッドに渡し、返されたビューに渡されるすべてのモデルにこの値を配布できます。

私はそれがうまくいくと確信していますが、このTempDataは、実際には誰も必要としないセッションに存在します。値は、単一のリクエストの間、コード内で排他的に使用され、その後は実質的に無効になると想定されています。

私は2つのオプションを考え出しました:

  1. ActionFilter では、この値を OnActioExecuting() の TempData に設定し、OnActionExecuted() で削除します。OnActionExecuted が呼び出されるまでにコントローラー アクションが終了し、応答が既に生成されており、この TempData コンテンツがまだセッションに到達していないことを正しく理解していますか?

  2. カスタム静的クラス (ロジック) のいずれかで、この値のパブリック プロパティを定義するだけで、必要なときにいつでも使用できます。この静的フィールドは、OnActionExecuting() と実際のコントローラー メソッドの実行の間で失われませんか? サーバーでのリクエスト処理中にこの値が失われる可能性がある他の問題はありますか?

まだ検討していない他の/より良いオプションはありますか?

4

2 に答える 2

8

ActionParametersusing を使用すると、コードを非常に簡単にテストできることがわかりました。次のようにできます。

// inside your actionfilter
public override void OnActionExecuting(ActionExecutinContext context)
{
    var someData = // ... load some data

    context.ActionParameters["someData"] = someData;
}


// and then in your action method
[ProvideSomeData]
public ViewResult Index(SomeData someData)
{
    // someData will be populated in here
}
于 2009-05-03T19:59:23.987 に答える