ViewData и ViewBag позволяют получить доступ к любым данным, которые были переданы с контроллера.
Основное различие между этими двумя - это то, как вы обращаетесь к данным. В ViewBag вы получаете доступ к данным с помощью строки в виде ключей - ViewBag [ "numbers" ] В ViewData вы получаете доступ к данным с помощью свойств - ViewData.numbers.
Пример ViewDatastrong >
КОНТРОЛЛЕР
var Numbers = new List<int> { 1, 2, 3 };
ViewData["numbers"] = Numbers;
VIEW
<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;
VIEW
<ul>
@foreach (var number in ViewBag.numbers)
{
<li>@number</li>
}
</ul>
Сессия - еще один очень полезный объект, который будет содержать любую информацию.
Например, когда пользователь вошел в систему, вы хотите сохранить его уровень авторизации.
// GetUserAuthorizationLevel - some method that returns int value for user authorization level.
Session["AuthorizationLevel"] = GetUserAuthorizationLevel(userID);
Эта информация будет сохранена в сеансе, пока активен сеанс пользователя. Это можно изменить в файле 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");
}
TempDatastrong > очень похож на ViewData и ViewBag, однако он будет содержать данные только для одного запроса.
КОНТРОЛЛЕР
//Создан метод добавления нового клиента.
TempData["ClientAdded"] = "Client has been added";
VIEW
@if (TempData["ClientAdded"] != null)
{
<h3>@TempData["ClientAdded"] </h3>
}
TempData полезен, когда вы хотите передать некоторую информацию из View в Controller. Например, вы хотите сохранить время, когда запрос был запрошен.
VIEW
@{
TempData["DateOfViewWasAccessed"] = DateTime.Now;
}
КОНТРОЛЛЕР
if (TempData["DateOfViewWasAccessed"] != null)
{
DateTime time = DateTime.Parse(TempData["DateOfViewWasAccessed"].ToString());
}