2009-05-22 22 views
6

私が読んだことから、TempDataに配置された情報は、現在の要求と次の要求(そこではリダイレクトを介して情報を渡すことができる)にあります。問題は、リダイレクトしないコントローラアクションを参照すると、TempDataの情報が次のリクエストのためにそこに残ることです。 TempDataを使用して、ユーザーに表示される情報メッセージを格納しています。そのため、2番目の画面の最初の画面のメッセージも表示されます。ASP.NET MVC:コントローラメソッド実行後のTempDataのクリア

もう一度使用しなくなったら、コントローラのライフサイクルでTempDataをクリアするのに良い時期はありますか?

答えて

7

Use ViewData instead of TempData if you are not redirecting。 TempDataを手動で消去する必要はありません。リダイレクト時にのみ使用すると、自動的に正しい時刻にクリアされます。

+0

コントローラの動作がリダイレクトされている場合はどうなりますか?その場合、メッセージはもう存在しないため、ViewDataを使用することはできません。 TempData/ViewDataに格納するよりも、このような表示メッセージを処理する方がいいですか? –

+0

リダイレクト時にはViewDataを、リダイレクト時にはTempDataを使用する必要があります。どちらの場合も、他のすべては自動的です。表示するには、 TempData ["key"] ??と書いてください。 ViewData ["key"] を表示します。 –

0

POST-REDIRECT-GETを使用していない場合、ViewDataを使用すると思います。あなたが本当に動作が必要な場合しかし、あなたはあなた自身のカスタムTempDataProviderを作成する必要があり、上述しました:

public class YourTempDataProvider : SessionStateTempDataProvider 
{ 
    public override void SaveTempData(ControllerContext controllerContext, IDictionary<string, object> values) 
    { 
     bool redirecting = ... 

     if(redirecting) 
     { 
      base.SaveTempData(controllerContext, values); 
     } 
    } 
} 
+0

このカスタムクラスはどのように使用されますか? – Alex

0

私はカスタムTempDataProvider以外のここにある場所を探していないでしょう。しかし、それは難しいです。他のコントローラで通常の動作をしたい場合はどうすればよいですか?私は今これをYAGNIしたいと思います。パターンに気付くと、それをいくつかの共通の場所にプルすることができます。

関連する問題