ViewData と ViewBag を使用すると、コントローラーから渡されたビュー内の任意のデータにアクセスできます。
これら 2 つの主な違いは、データへのアクセス方法です。ViewBag では、文字列をキーとして使用してデータにアクセスしています - ViewBag[“numbers”] ViewData では、プロパティ - ViewData.numbers を使用してデータにアクセスしています。
ViewData の例
コントローラ
var Numbers = new List<int> { 1, 2, 3 };
ViewData["numbers"] = Numbers;
見る
<ul>
@foreach (var number in (List<int>)ViewData["numbers"])
{
<li>@number</li>
}
</ul>
ViewBag の例
コントローラ
var Numbers = new List<int> { 1, 2, 3 };
ViewBag.numbers = Numbers;
見る
<ul>
@foreach (var number in ViewBag.numbers)
{
<li>@number</li>
}
</ul>
セッションは、あらゆる情報を保持するもう 1 つの非常に便利なオブジェクトです。
たとえば、ユーザーがシステムにログインしたときに、ユーザーの承認レベルを保持したいとします。
// GetUserAuthorizationLevel - some method that returns int value for user authorization level.
Session["AuthorizationLevel"] = GetUserAuthorizationLevel(userID);
この情報は、ユーザー セッションがアクティブである限り、Session に保存されます。これは、Web.config ファイルで変更できます。
<system.web>
<sessionState mode="InProc" timeout="30"/>
したがって、アクション内のコントローラーで:
public ActionResult LevelAccess()
{
if (Session["AuthorizationLevel"].Equals(1))
{
return View("Level1");
}
if (Session["AuthorizationLevel"].Equals(2))
{
return View("Level2");
}
return View("AccessDenied");
}
TempDataは ViewData および ViewBag と非常に似ていますが、1 つの要求のデータのみが含まれます。
コントローラ
// 新しいクライアントを追加するメソッドを作成しました。
TempData["ClientAdded"] = "Client has been added";
見る
@if (TempData["ClientAdded"] != null)
{
<h3>@TempData["ClientAdded"] </h3>
}
TempData は、View から Controller に情報を渡したい場合に便利です。たとえば、ビューが要求されたときに時間を保持したい。
見る
@{
TempData["DateOfViewWasAccessed"] = DateTime.Now;
}
コントローラ
if (TempData["DateOfViewWasAccessed"] != null)
{
DateTime time = DateTime.Parse(TempData["DateOfViewWasAccessed"].ToString());
}