ViewDataとTempDataの違いは?


94

私はViewDataが何であるかを知っており、常にそれを使用していますが、ASP.NETプレビュー5では、TempDataと呼ばれる新しいものを導入しました。

オブジェクトの辞書アプローチを使用する代わりに、通常は強くViewDataを入力します。

では、ViewDataの代わりにTempDataを使用する必要があるのはいつですか?

このためのベストプラクティスはありますか?


私は約何か追加したいとしますTempDataここstackoverflow.com/a/17199709/2015869
イマドアラザニ川

回答:


94

1文で:TempDataViewDataのように1つの違いがあります:それらは破棄された後、2つの連続するリクエスト間のデータのみを含みます。TempDataエラーメッセージなどを渡すために使用できます。

古くなっていますが、この記事にTempDataライフサイクルの説明があります。

ベン・シャーマンがここで言ったように

TempDataは、1つの単一の要求で使用できるセッションベースの一時ストレージディクショナリです。コントローラ間でメッセージを受け渡すのは素晴らしいことです。


私はその中で、それはかなり大きな違いだと思うTempData潜在的にはるかに複雑な(セッション)メソッドにメソッドから渡される簡単な辞書よりも何かを含むことになる
マッティVirkkunen

29

アクションがRedirectToAction結果を返すと、HTTPリダイレクトが発生します(Response.Redirectと同じ)。データは、単一のHTTPリダイレクト要求の間、コントローラーのTempDataプロパティ(辞書)に保存できます。


同じ場合でもViewDataの値は保持されますか?
IsmailS、2011年

9
@Ismail:いいえ、ViewDataはリダイレクトを通じてデータを保持しません。それがTempDataの主な違いです。
マリアーノデサンツェ

5

ViewData:

  • ViewData 辞書タイプです public ViewDataDictionary ViewData { get; set; }
  • コントローラーからビューにデータを渡すために使用できます(一方向のみ)
  • 人生は現在の要求の間だけあります
  • 文字列を渡す場合、型キャストする必要はありません
  • オブジェクトを渡す場合は、型キャストする必要がありますが、その前に、それがnullでないかどうかを確認する必要があります
  • クラスControllerBaseの親であるのプロパティController

TempData:

  1. TempData内部使用TempDataDictionarypublic TempDataDictionary TempData { get; set; }
  2. データがTempDataDictionaryオブジェクトに保存されると:
    • それは永続化され、任意のコントローラの任意のビューまたは任意のアクションから読み取ることができます
    • 一度しか読み取ることができません。一度読み取ると、nullになります
    • セッションに保存されるため、セッションの有効期限が切れるとデータは失われます。

この動作は、ASP.NET MVC 2以降のバージョンから新しく追加されました。ASP.NET MVCの以前のバージョンでは、の値TempDataは次のリクエストまでしか利用できませんでした。

  1. 読み込まれるかセッションが期限切れになり、どこからでも読み込むことができるようになるまで、それは生きています。

MVCでのViewData、ViewBag、TempData、Sessionの比較を詳細に見る



0

ビューデータは、コントローラーから対応するビューにデータを渡すときに使用されます。ビューデータの寿命は非常に短いため、リダイレクトが発生すると破棄されます。例(コントローラー):

public ViewResult try1()
    {
        ViewData["DateTime"] = DateTime.Now;
        ViewData["Name"] = "Mehta Hitanshi";
        ViewData["Twitter"] = "@hitanshi";
        ViewData["City"] = "surat";
        return View();
    }

try1.cshtm

<table>
<tr>
    <th>Name</th>
    <th>Twitter</th>
    <th>Email</th>
    <th>City</th>
    <th>Mobile</th>
</tr>
<tr>
    <td>@ViewData["Name"]</td>
    <td>@ViewData["Twitter"]</td>
    <td>@ViewData["City"]</td>
</tr>
</table> 

TempDataは、コントローラー間またはアクション間でデータを転送します。これは、1回限りのメッセージを保存するために使用され、その寿命は非常に短いです。TempData.Keep()を使用して、すべてのアクションで使用できるようにしたり、永続的にしたりできます。

例(コントローラー):

public ActionResult try3()
    {
        TempData["DateTime"] = DateTime.Now;
        TempData["Name"] = "Ravina";
        TempData["Twitter"] = "@silentRavina";
        TempData["Email"] = "Ravina12@gmail.com";
        TempData["City"] = "India";
        TempData["MobNo"] = 9998975436;
        return RedirectToAction("TempView1");
    }
    public ActionResult TempView1()
    {
        return View();
    }

TempView1.cshtm

<table>
<tr>
    <th>Name</th>
    <th>Twitter</th>
    <th>Email</th>
    <th>City</th>
    <th>Mobile</th>
</tr>
<tr>
    <td>@TempData["Name"]</td>
    <td>@TempData["Twitter"]</td>
    <td>@TempData["Email"]</td>
    <td>@TempData["City"]</td>
    <td>@TempData["MobNo"]</td>
</tr>
</table>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.