回答:
1文で:TempData
ViewDataのように1つの違いがあります:それらは破棄された後、2つの連続するリクエスト間のデータのみを含みます。TempData
エラーメッセージなどを渡すために使用できます。
古くなっていますが、この記事にはTempData
ライフサイクルの説明があります。
TempDataは、1つの単一の要求で使用できるセッションベースの一時ストレージディクショナリです。コントローラ間でメッセージを受け渡すのは素晴らしいことです。
TempData
潜在的にはるかに複雑な(セッション)メソッドにメソッドから渡される簡単な辞書よりも何かを含むことになる
アクションがRedirectToAction結果を返すと、HTTPリダイレクトが発生します(Response.Redirectと同じ)。データは、単一のHTTPリダイレクト要求の間、コントローラーのTempDataプロパティ(辞書)に保存できます。
ViewData:
ViewData
辞書タイプです public ViewDataDictionary ViewData { get; set; }
ControllerBase
の親であるのプロパティController
TempData:
TempData
内部使用TempDataDictionary
:public TempDataDictionary TempData { get; set; }
TempDataDictionary
オブジェクトに保存されると:
この動作は、ASP.NET MVC 2以降のバージョンから新しく追加されました。ASP.NET MVCの以前のバージョンでは、の値TempData
は次のリクエストまでしか利用できませんでした。
私はこの比較が有用だと思った:http : //www.dotnet-tricks.com/Tutorial/mvc/9KHW190712-ViewData-vs-ViewBag-vs-TempData-vs-Session.html
私が遭遇した1つの問題は、TempData値がデフォルトで読み取られた後にクリアされることです。オプションがあります。詳細については、Msdnのメソッド「Peek」および「Keep」を参照してください。
ビューデータは、コントローラーから対応するビューにデータを渡すときに使用されます。ビューデータの寿命は非常に短いため、リダイレクトが発生すると破棄されます。例(コントローラー):
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>
TempDataについての補足です。
その中のデータは、次のリクエストまでではなく、次の読み取り操作が呼び出されるまで保存されます!
参照:
TempDataは2番目のリクエスト後に破棄されません
TempData
ここstackoverflow.com/a/17199709/2015869