76

ASP.NETMVC3を使用してWebアプリケーションを構築しています。

私がやろうとしているのは、2つのコントローラー間で値を渡すことですが、これを行う方法はたくさんありますが、これに特に興味がありますTempData

public ActionResult Action1()
{
    string someMessage;
    Test obj = SomeOperation();
    if(obj.Valid)
    {
        someMessage = obj.UserName;
    }
    else
    {
        someMessage = obj.ModeratorName;
    }

    TempData["message"] = someMessage;

    return RedirectToAction("Index");
}

public ActionResult Index()
{
    ViewBag.Message = TempData["message"]

    return View();
}

それで、TempDataここでの使用は正しいですか?つまり、プログラミングのベストプラクティスでは、この正しい使用方法はありTempDataますか?

どのようなリアルタイムのケースをTempData使用する必要がありますか?

注:私は次のリンクを通過しました

ありがとう

4

3 に答える 3

75

TempDataは、次のリクエストにのみ必要なデータをダンプできるバケットです。つまり、TempDataに入れたものはすべて、次のリクエストが完了した後に破棄されます。これは、フォーム検証エラーなどの1回限りのメッセージに役立ちます。ここで注意すべき重要な点は、これがセッション内の次のリクエストに適用されるため、リクエストが別のブラウザウィンドウまたはタブで発生する可能性があることです。

あなたの特定の質問に答えるために:それを使用する正しい方法はありません。それはすべて使いやすさと便利さ次第です。それが機能し、理にかなっていて、他の人がそれを比較的簡単に理解しているなら、それは良いことです。あなたの特定のケースでは、この方法でパラメーターを渡すことは問題ありませんが、それを行う必要があるのは奇妙です(コードの臭い?)。このような値をリソース(リソースの場合)またはデータベース(永続的な値の場合)に保持したいと思います。ページタイトルに使用しているので、使い方からするとリソースのようです。

お役に立てれば。

于 2012-09-14T14:56:51.893 に答える
66

MVC 3以降では、TempDataの永続化動作が変更され、TempDataの値は、次のリクエストだけでなく、読み取られるまで永続化されることに注意してください。

TempDataの値は、読み取られるまで、またはセッションがタイムアウトするまで持続します。TempDataの値は単一の要求を超えて利用できるため、この方法でTempDataを永続化すると、リダイレクトなどのシナリオが可能になります。 https://msdn.microsoft.com/en-in/library/dd394711%28v=vs.100%29.aspx

于 2015-06-30T10:21:06.553 に答える
19

TempDataの永続性に注意してください。少し注意が必要です。たとえば、現在のリクエスト内でTempDataを読み取るだけでも削除されるため、次のリクエストではTempDataを使用できません。代わりに、メソッドを使用できますPeek。このクールな記事を読むことをお勧めします:

MVC Tempdata、Peek and Keep confusion

于 2015-04-20T11:21:39.563 に答える