Разница между ViewData и TempData?

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

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

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

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

Ответ 1

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

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

Как сказал Бен Шейрман здесь:

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

Ответ 2

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

Ответ 3

Я нашел это сравнение полезным: http://www.dotnet-tricks.com/Tutorial/mvc/9KHW190712-ViewData-vs-ViewBag-vs-TempData-vs-Session.html

Одна из моих проблем, с которой я столкнулся, - это то, что значения TempData очищаются после того, как они считаны по умолчанию. Существуют опции, см. Методы "Peek" и "Keep" на Msdn для получения дополнительной информации.

Ответ 4

ViewData:

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

TempData:

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

Подробнее см. сравнение ViewData, ViewBag, TempData и Session в MVC