Подтвердить что ты не робот

Какое время для ViewData, ViewBag, Session, TempData

Я редактировал проект, и я видел Session [ "] в одном методе контроллера и TempData [" "] в другом. Есть ли разница между 4 или это всего лишь 4 способа сделать то же самое.

4b9b3361

Ответ 1

  • ViewData/ViewBag - действителен только для продолжительности текущего запроса.
    Вы устанавливаете его в действие контроллера и используете его в представлении, а затем исчезаете.
    Разница в том, что первый словарь, тогда как второй - это всего лишь 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​​strong > - он позволяет сохранять текущую информацию в течение одного последующего запроса. Вы храните что-то внутри 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();
}

ASP.NET MVC автоматически истекает значение, которое было сохранено в TempData после его чтения. Под обложками ASP.NET MVC сохраняет информацию в Session.

  • Сеанс - тот же, что и TempData, за исключением того, что он никогда не истекает - он будет действителен для всех запросов, а не для одного перенаправления.

Ответ 2

ASP.net MVC представил ViewData, ViewBag, TempData, Session для передачи данных между контроллером для просмотра.

ViewData​​STRONG >

ViewData реализуется с помощью класса ViewDataDictionary, который хранится в CurrentRequestContext. Таким образом, жизненный цикл ViewData завершится, когда заканчивается текущий запрос.

ViewBag также похож на ViewData, и только различие заключается в том, что он позволяет динамически совместно использовать данные с помощью объектов динамической области.

TempData​​strong > - это очень короткоживущий экземпляр, и вы должны использовать его только во время текущих и последующих запросов. Это будет быть удобными, если вы хотите использовать перенаправления (RedirectToAction, RedirectToRoute, Redirect) в ASP.net MVC и передавать некоторые данные среди перенаправлений. TempData хранит данные в сеансе, но структура удаляет данные, когда текущие и последующие запросы заканчиваются.

Сеанс является долговременным (никогда не истекает) данными, принадлежащими пользовательскому сеансу. Необходимо помнить, когда вы используете переменные сеанса, которые могут быть легко вызваны проблемами.

protected void Session_Start(Object sender, EventArgs e) 
{
   int userType = 1;
   HttpContext.Current.Session.Add("_SessionUserType",userType );
}

Ответ 3

ViewData:

  • Является специальным словарем, унаследованным от ViewDataDictionary.
  • Используется для отправки данных с контроллера для просмотра.
  • Срок службы - текущий запрос.
  • Он будет уничтожен, если у вас есть Redirect.
  • По соображениям безопасности лучше проверить его на null перед использованием.
  • Кастинг должен выполняться для операции.

ViewBag:

  • Является динамическим типом (этот тип представлен в С# 4).

  • Подобно ViewData используется для отправки данных с контроллера в представление.

  • Продолжительность действия своих значений в текущем запросе.
  • При перенаправлении между страницами его значение будет равно null.
  • Из соображений безопасности перед использованием проверьте его на null.
  • Кастинг не нужен, поэтому он быстрее, чем ViewData.

TempData:

  • Специальный тип словаря, полученного из TempDataDictionary.
  • Он имеет Короткое время жизни и используется для отправки информации между страницами (Redirect).
  • После полного рендеринга View его значение будет null.
  • Из соображений безопасности перед использованием проверьте его на null.
  • Кастинг должен выполняться для операции.

Сеанс:

  • Используется для отправки информации между различными запросами.
  • Его значение не null не нулевые значения; Если через определенное время (session expire).
  • Из соображений безопасности перед использованием проверьте его на null.
  • Кастинг должен выполняться для операции.

В этой статье объясняется разница между ViewData, ViewBag и TempData. Надеюсь, вы можете обратиться к этой статье за ​​вашими потребностями.