プロジェクトを編集していて、あるコントローラ メソッドに Session[""] があり、別のコントローラ メソッドに TempData[""] がありました。4つに違いはありますか、それとも同じことを行うのに4つの方法しかありません.
46511 次
3 に答える
84
- ViewData/ViewBag - 現在のリクエストの間のみ有効です。
コントローラーアクションで設定してビューで使用すると、消えます。
違いは、1 つ目はディクショナリであるのに対し、2 つ目はこのディクショナリの単なるdynamic
ラッパーであることです。
ただし、どちらも同じデータを指しています。
ViewBag は ASP.NET MVC 3 で導入されました。
例:
public ActionResult Index()
{
ViewData["foo"] = "bar";
return View();
}
ビュー内では、次の値を使用できます。
<div>@ViewData["foo"]</div>
ViewBag と同じですが、動的です。
public ActionResult Index()
{
ViewBag.foo = "bar";
return View();
}
ビュー内では、次の値を使用できます。
<div>@ViewBag.foo</div>
ご覧のとおり、ViewData/ViewBag は、ビュー モデルを使用する従来の推奨される方法と比較して、コントローラー アクションからビューに情報を渡す代替方法にすぎません。
public class MyViewModel
{
public string Foo { get; set; }
}
その後:
public ActionResult Index()
{
var model = new MyViewModel { Foo = "bar" };
return View(model);
}
強く型付けされたビュー内:
@model MyViewModel
<div>@Html.DisplayFor(x => x.Foo)</div>
ご覧のとおり、ビュー モデルを使用すると、コントローラー アクションからビューに情報を渡す際に、厳密に型指定されたアプローチが提供されます。
- TempData - 単一の後続のリクエストの間、情報を永続化できます。TempData 内に何かを格納してからリダイレクトします。リダイレクト先のターゲット コントローラー アクションでは、TempData 内に格納された値を取得できます。
例:
public ActionResult Foo()
{
TempData["foo"] = "bar";
return RedirectToAction("bar");
}
public ActionResult Bar()
{
var value = TempData["foo"] as string;
// use the value here. If you need to pass it to the view you could
// use ViewData/ViewBag (I can't believe I said that but I will leave it for the moment)
return View();
}
TempData
ASP.NET MVC は、保存された値を読み取ると、その値を自動的に期限切れにします。内部では、ASP.NET MVC が情報を .xml ファイルに永続化しSession
ます。
- セッション- 期限切れにならない点を除いて TempData と同じ - 単一のリダイレクトではなく、すべてのリクエストに対して有効です。
于 2012-10-01T16:10:01.713 に答える
5
ビューデータ:
- から継承された特別な辞書
ViewDataDictionary
です。 - コントローラーからビューにデータを送信するために使用されます。
- その寿命は現在の要求です。
- 持っていると破壊されます
Redirect
。 - セキュリティ上の理由から、使用前に確認することをお勧めし
null
ます。 - キャストは操作のために行う必要があります。
ビューバッグ:
動的な型です (この型は c#4 で示されます)。
Like
ViewData
は、コントローラーからビューにデータを送信するために使用されます。- 現在のリクエストにおけるその値の有効期間。
- ページ間のリダイレクトでは、その値は null になります。
- セキュリティ上の理由から、使用前に確認してください
null
。 - キャストする必要がないので、 よりも高速です
ViewData
。
温度データ:
- から派生した特別な種類の辞書
TempDataDictionary
。 - 有効期間が短く、ページ間で情報を送信するために使用されます (
Redirect
)。 - を完全にレンダリングした後
View
、その値は になりますnull
。 - セキュリティ上の理由から、使用前に確認してください
null
。 - キャストは操作のために行う必要があります。
セッション:
- 異なるリクエスト間で情報を送信するために使用されます。
- その値は
null
null 値ではありません。一定時間後でなければ(session expire
)。 - セキュリティ上の理由から、使用前に確認してください
null
。 - キャストは操作のために行う必要があります。
この記事では、ViewData、ViewBag、TempData の違いについて説明します。必要に応じて、この記事を参照していただければ幸いです。
于 2016-11-21T06:46:15.690 に答える