2

ここで説明するように、web.configを介してmvc2アプリでsessionStateを無効にし、独自のcontrollerfactoryおよびダミーのtempdataプロバイダーも作成しました。

ASP.NET MVCでセッション状態を無効にするにはどうすればよいですか?

SaveTempDataが例外をスローするように作成したのは私だけです。

 public void SaveTempData(ControllerContext controllerContext, 
                          IDictionary<string, object> values)
    {
        throw new NotImplementedException(
        "Cannot set tempdata, no session state is available.");
    }

SessionオブジェクトまたはTempDataオブジェクトのいずれかを使用しているコードがないことを確認しましたが、「OnResultExecuted」イベントが発生した後もこの例外がスローされるのを確認しました。私は自分のmvc1サイトでこれとまったく同じパターンを使用していましたが、例外は見られませんでした。何か案は?

「SaveTempData」の実装を次のように変更すると、次のようになります。

public void SaveTempData(ControllerContext controllerContext, 
                         IDictionary<string, object> values)
    {
        if (values.Count != 0)
        {
            throw new NotImplementedException(
            "Cannot set tempdata, no session state is available.");
        }
    }

すべてが期待どおりに機能します。どこでも使用していないときにSaveTempDataが呼び出される理由を知りたいと思っています。

アップデート

この記事を発見しました:http ://www.gregshackles.com/2010/07/asp-net-mvc-do-you-know-where-your-tempdata-is/

これは、ExecuteCoreがアクションの周りでPossiblyLoadTempDataとPossiblySaveTempDataを呼び出すことを説明しています-これが私の問題の原因でした。これはmvc2とmvc1の新しい追加ですか?

4

2 に答える 2

1

この記事を発見しました:http ://www.gregshackles.com/2010/07/asp-net-mvc-do-you-know-where-your-tempdata-is/

これは、ExecuteCoreがアクションの周りでPossiblyLoadTempDataとPossiblySaveTempDataを呼び出すことを説明しています-これが私の問題の原因でした。これはmvc2とmvc1の新しい追加ですか?

于 2011-04-01T20:05:52.307 に答える
1

これがメソッドに実装されるController.ExecuteCore方法です。LoadTempDataandメソッドはSaveTempData、各アクションの前後に常に呼び出されるため、例外がスローされないようにしてください。セッションを効果的に無効にするために、web.configに次のものを入れることをお勧めします。

<sessionState mode="Off" />
于 2011-04-01T20:01:01.597 に答える