Eu sei o que é ViewData e o uso o tempo todo, mas no ASP.NET Preview 5 eles introduziram algo novo chamado TempData.
Eu normalmente digito fortemente meu ViewData, em vez de usar a abordagem de dicionário de objetos.
Então, quando devo usar TempData em vez de ViewData?
Existem práticas recomendadas para isso?
asp.net-mvc
Elijah Manor
fonte
fonte
TempData
aqui stackoverflow.com/a/17199709/2015869Respostas:
Em uma frase:
TempData
são como ViewData com uma diferença: Eles só contêm dados entre duas solicitações sucessivas, depois disso são destruídos. Você pode usarTempData
para passar mensagens de erro ou algo semelhante.Embora desatualizado, este artigo tem uma boa descrição do
TempData
ciclo de vida.Como Ben Scheirman disse aqui :
fonte
TempData
envolverá algo potencialmente muito mais complicado (a sessão) do que um simples dicionário sendo passado de método para métodoQuando uma ação retorna um resultado RedirectToAction, ela causa um redirecionamento HTTP (equivalente a Response.Redirect). Os dados podem ser preservados na propriedade TempData (dicionário) do controlador durante uma única solicitação de redirecionamento HTTP.
fonte
Ver dados:
ViewData
é um tipo de dicionáriopublic ViewDataDictionary ViewData { get; set; }
ControllerBase
, que é o pai daController
classeTempData:
TempData
use internamenteTempDataDictionary
:public TempDataDictionary TempData { get; set; }
TempDataDictionary
objeto:Este comportamento é novo na ASP.NET MVC 2 e nas versões posteriores. Em versões anteriores da ASP.NET MVC, os valores em
TempData
estavam disponíveis apenas até a próxima solicitação.Veja a comparação de ViewData, ViewBag, TempData e Session em MVC em detalhes
fonte
Achei esta comparação útil: http://www.dotnet-tricks.com/Tutorial/mvc/9KHW190712-ViewData-vs-ViewBag-vs-TempData-vs-Session.html
Uma pegadinha que descobri é que os valores TempData são apagados após serem lidos por padrão. Existem opções, consulte os métodos 'Peek' e 'Keep' no Msdn para obter mais informações .
fonte
view data é usado quando queremos passar dados do controlador para a view correspondente. os dados de exibição têm vida muito curta, o que significa que serão destruídos quando ocorrer o redirecionamento. Exemplo (controlador):
try1.cshtm
TempData transfere os dados entre controladores ou entre ações. Ele é usado para armazenar mensagens únicas e sua vida é muito curta. Podemos usar TempData.Keep () para torná-lo disponível por meio de todas as ações ou para torná-lo persistente.
Exemplo (controlador):
TempView1.cshtm
fonte
Apenas uma nota lateral para TempData.
Os dados nele são armazenados não até a próxima solicitação , mas até a próxima operação de leitura ser chamada!
Veja:
TempData não destruirá após a segunda solicitação
fonte