Я знаю, что такое ViewData, и использую его все время, но в ASP.NET Preview 5 они представили что-то новое под названием TempData.
Обычно я строго набираю свои ViewData вместо того, чтобы использовать подход словаря объектов.
Итак, когда мне следует использовать TempData вместо ViewData?
Есть ли лучшие практики для этого?
asp.net-mvc
Elijah Manor
источник
источник
TempData
сюда stackoverflow.com/a/17199709/2015869Ответы:
Одним предложением:
TempData
похожи на ViewData с одним отличием: они содержат данные только между двумя последовательными запросами, после чего они уничтожаются. Вы можете использоватьTempData
для передачи сообщений об ошибках или чего-то подобного.Хотя эта статья и устарела, она хорошо описывает
TempData
жизненный цикл.Как сказал здесь Бен Шейрман :
источник
TempData
будет связано с чем-то потенциально более сложным (сеансом), чем простой словарь, передаваемый от метода к методу,Когда действие возвращает результат RedirectToAction, оно вызывает перенаправление HTTP (эквивалент Response.Redirect). Данные могут быть сохранены в свойстве (словаре) TempData контроллера на время одного запроса перенаправления HTTP.
источник
ViewData:
ViewData
это тип словаряpublic ViewDataDictionary ViewData { get; set; }
ControllerBase
, которое является родительским дляController
классаTempData:
TempData
внутреннее использованиеTempDataDictionary
:public TempDataDictionary TempData { get; set; }
TempDataDictionary
объект:Такое поведение является новым в ASP.NET MVC 2 и более поздних версиях. В более ранних версиях ASP.NET MVC значения
TempData
были доступны только до следующего запроса.См. Подробное сравнение ViewData, ViewBag, TempData и Session в MVC
источник
Я нашел это сравнение полезным: http://www.dotnet-tricks.com/Tutorial/mvc/9KHW190712-ViewData-vs-ViewBag-vs-TempData-vs-Session.html
Одна проблема, с которой я столкнулся, заключается в том, что значения TempData очищаются после чтения по умолчанию. Есть варианты, см. В методах «Peek» и «Keep» в Msdn .
источник
данные представления используются, когда мы хотим передать данные из контроллера в соответствующее представление. данные просмотра имеют очень короткий срок жизни, это означает, что они будут уничтожены при перенаправлении. Пример (Контроллер):
try1.cshtm
TempData передает данные между контроллерами или между действиями. Он используется для хранения одноразовых сообщений, и его срок службы очень короткий. Мы можем использовать TempData.Keep (), чтобы сделать его доступным для всех действий или сделать его постоянным.
Пример (Контроллер):
TempView1.cshtm
источник
Просто примечание к TempData.
Данные в нем хранятся не до следующего запроса , а до вызова следующей операции чтения !
Смотрите:
TempData не уничтожается после второго запроса
источник