2008-10-06 14 views
88

Wiem, co ViewData jest i używać go przez cały czas, ale w ASP.NET Preview 5 wprowadzono coś nowego o nazwie TempData.Różnica między ViewData i TempData?

Zwykle zdecydowanie wpisuję moje dane ViewData, zamiast używać słownika obiektów.

Kiedy zatem należy używać TempData zamiast ViewData?

Czy są na to sprawdzone metody?

+0

Chciałbym dodać coś o 'TempData' tutaj http://stackoverflow.com/a/17199709/2015869 –

Odpowiedz

89

W jednym zdaniu: TempData są podobne do ViewData z jedną różnicą: zawierają tylko dane między dwoma kolejnymi żądaniami, po czym są niszczone. Możesz użyć TempData, aby przekazać komunikaty o błędach lub coś podobnego.

Chociaż nieaktualny, this article ma dobry opis cyklu życia TempData.

Jako Ben Scheirman powiedział here:

TempData jest słownikiem przechowywanie tymczasowe sesja oparciem, która jest dostępna dla jednego wniosku. Wspaniale jest przekazywać wiadomości między kontrolerami.

+1

oba łącza się zrywają :( – IsmailS

+0

Myślę, że to całkiem duża różnica, ponieważ" TempData "będzie zawierało coś potencjalnie znacznie bardziej skomplikowana (sesja) niż prosty słownik przekazywany z metody t o metoda –

26

Gdy działanie zwraca wynik przekierowania, powoduje przekierowanie HTTP (odpowiednik Response.Redirect). Dane mogą być przechowywane we właściwości TempData (słowniku) kontrolera przez czas trwania pojedynczego żądania przekierowania HTTP.

+0

Czy wartość ViewData będzie zachowana w tym samym przypadku? – IsmailS

+9

@Ismail: Nie, ViewData nie zachowa danych poprzez przekierowanie. To główna różnica TempData. –

1

ViewData:

  • ViewData to rodzaj słownika public ViewDataDictionary ViewData { get; set; }
  • Może być stosowany do przekazywania danych z kontrolera do widoku Tylko w jedną stronę
  • To życie polega tylko podczas bieżącego żądania
  • Jeśli przekazujesz ciąg znaków, nie musisz już pisać na maszynie
  • Jeśli przekazujesz obiekt, musisz go wpisać w typ, ale przedtem trzeba sprawdzić, czy nie jest null
  • Jego własności na ControllerBase, który jest rodzicem klasy Controller

TempData:

  • TempData wewnętrznie używają TempDataDictionary public TempDataDictionary TempData { get; set; }
  • Po danych jest zapisywany w obiekcie TempDataDictionary
  • Trwa w nim i może być gotowy z dowolnego widoku lub dowolnej akcji w dowolnym kontr sterniku
  • To może być odczytywane tylko raz, raz czytać, staje się zerowa
  • Oszczędza się więc na sesji wygaśnięcia sesji utraty danych
  • Takie zachowanie jest nowy z ASP.NET MVC 2 i ostatnią wersją.
  • We wcześniejszych wersjach programu ASP.NET MVC, wartości w TempData była dostępna tylko do następnego wniosku
  • To jest życie, dopóki nie są odczytywane lub sesja wygasa i mogą być odczytywane z dowolnego

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