私はMVC3Webアプリを持っています。その中で私はPRG(Post-Redirect-Get)パターンを使用してきました。これは、モデルの検証が失敗した場合のポストバック中に、ViewDataをTempDataに永続化してから、元のGETアクションにリダイレクトします。
アクション後-
if (!ModelState.IsValid)
TempData["ViewData"] = ViewData;
後のGETアクション-
if (TempData["ViewData"] != null)
ViewData = (ViewDataDictionary)TempData["ViewData"];
これはほとんど通常の方法です。これまで、すべてが正常に機能しています。ここで、セッションの永続性を改善する必要があります。つまり、「より長い」セッションが必要です。ASP.NetStateServerを使用すると結論付けました。
セッションをStateServerに移行した後-
web.config -
<system.web> ...
<sessionState timeout="180" mode="StateServer" cookieless="UseCookies" />
...
カスタムオブジェクトを保存している一部のセッションで「シリアル化できません」というエラーが発生し始めました。問題を整理するようなオブジェクト[Serializable]を作成しました。しかし今、私は上記のPRGパターンで立ち往生しています!
エラー-アセンブリ'System.Web.Mvc、Version = 3.0.0.0、Culture = neutral、PublicKeyToken=31bf3856ad364e35'に「System.Web.Mvc.ViewDataDictionary」と入力してもシリアル化可能としてマークされていません。
奇妙なことに、私のシナリオを共有する単一のスレッドを見つけることができません。誰?