2011-01-19 12 views
0

クイックフィックスではなく、他の人が何をしているのだろうかと思っている。ModelStateを永続的にするが、あまりにも永続的ではない

問題は、私がModelStateを使用してエラー/検証をユーザーに報告していることですが、RedirectToAction()を使用するとModelStateが失われます。これを克服するために、私はOnActionExecutingのオーバーライドで、私が追加した、(他のすべてのコントローラが継承することを)私たちのベースコントローラにいくつかのコードを追加しました:

if (TempData["ModelState"] != null && !ModelState.Equals(TempData["ModelState"])) 
    ModelState.Merge((ModelStateDictionary)TempData["ModelState"]); 

そしてOnActionExecutedのオーバーライドでは私が追加しました:

TempData["ModelState"] = ModelState; 

これは、間違ったページにいくつかのエラーメッセージが表示されることがあるということです。私はちょうどModelState.clear()を実行して、私は現在のエラーを上書き/訂正したいと思うが、決してクリアされず、奇妙な場所にエラーが現れる場合があることを知っている。

どのように他の人がこれを処理しますか?任意のアイデアを歓迎するありがとう

答えて

1

ポイント13で

http://weblogs.asp.net/rashid/archive/2009/04/01/asp-net-mvc-best-practices-part-1.aspx

(データ変更のために使用PRGパターン)。

あなたがしていることとかなり似ていますが、アクションフィルタを使用していますが、まだ間違ったページにエラーメッセージが表示されていません。

+0

私の結果が常にnullだったので、 'if(filterContext.Result is ViewResult)'の部分がうまくいかないことがわかりましたが、それを取り出して魅力的でした。ありがとう – Ben

0

もし私がこれをやろうとすれば、キーの組み合わせ(セッション/コントローラー/アクション)を使用して、キャッシュを使用してキャッシュ(多分セッション)にモデルステートを保存します。 2分後に有効期限が切れていますか?

このようにして、モデルステートを再利用しようとしていない人は、他のアクションによって作成された可能性があります。「正しいモデルビューですか?」と心配する必要はありません。

次に、モデルステートをリロードする各メソッドに適用する属性を作成するか、ルートに基づいてベースコントローラーから自動的に属性を作成することができます。私はここに述べたソリューションを実装している

関連する問題