2008-10-06 2 views
88

Я знаю, что такое ViewData, и использовать его все время, но в ASP.NET Preview 5 они ввели что-то новое под названием TempData.Разница между ViewData и TempData?

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

Итак, когда следует использовать TempData вместо ViewData?

Есть ли какие-либо рекомендации для этого?

+0

Я хотел бы добавить что-то о `TempData` здесь http://stackoverflow.com/a/17199709/2015869 – 2013-06-19 22:39:47

ответ

89

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

Хотя устаревшее, this article имеет хорошее описание жизненного цикла TempData.

Как Бен Scheirman сказал here:

TempData является сессионным спинками временного хранения словаря, который доступен для одного запроса. Замечательно передавать сообщения между контроллерами.

+1

обе ссылки ломаются :( – IsmailS 2011-05-04 13:13:48

+0

Я думаю, что это довольно большая разница, так как` TempData` будет вовлекать что-то потенциально намного сложнее (сеанс), чем простой словарь, передаваемый из метода t o method – 2012-09-17 00:24:54

26

Когда действие возвращает результат RedirectToAction, оно вызывает перенаправление HTTP (эквивалентно Response.Redirect). Данные могут сохраняться в свойстве TempData (словарь) контроллера в течение одного запроса HTTP-перенаправления.

1

ViewData:

  • ViewData тип словаря public ViewDataDictionary ViewData { get; set; }
  • Он может быть использован для передачи данных от контроллера для просмотра, один путь только
  • Это жизнь лежит только в течение текущего запроса
  • Если передать строку, то нет необходимости в typecast
  • Если вы передаете объект, тогда вам нужно его вывести, но перед этим вы нужно проверить, если он не является нулевым
  • Сво собственности на ControllerBase, который является родителем класса контроллера

TempData:

  • TempData внутренне использовать TempDataDictionary public TempDataDictionary TempData { get; set; }
  • После того, как данные сохраняется в объекте TempDataDictionary
  • Он сохраняется в нем и может быть готов с любого вида или любого действия в любом ccontroller
  • Это может быть прочитано только один раз, когда-то читал, он становится нулевым
  • Он сохраняет в сессии так по истечении сеанса потери данных
  • Такое поведение является новым из ASP.NET MVC 2 и последней версии.
  • В более ранних версиях ASP.NET MVC, значение в TempData было доступно только до следующего запроса
  • Это жизнь, пока он не будет считан или сессия истекает и может быть считан из любой

See the comparison of ViewData, ViewBag, TempData and Session in MVC in detail

Смежные вопросы