Разница между 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