Wiem, czym jest ViewData i używam go cały czas, ale w ASP.NET Preview 5 wprowadzono coś nowego o nazwie TempData.
Zwykle silnie wpisuję moje ViewData, zamiast korzystać ze słownika obiektów.
Kiedy więc powinienem używać TempData zamiast ViewData?
Czy są jakieś najlepsze praktyki?
asp.net-mvc
Elijah Manor
źródło
źródło
TempData
tu dodać coś na temat stackoverflow.com/a/17199709/2015869Odpowiedzi:
Jednym zdaniem:
TempData
są jak ViewData z jedną różnicą: zawierają tylko dane między dwoma kolejnymi żądaniami, po czym są niszczone. Możesz użyćTempData
do przekazywania komunikatów o błędach lub czegoś podobnego.Chociaż nieaktualny, ten artykuł zawiera dobry opis
TempData
cyklu życia.Jak powiedział tutaj Ben Scheirman :
źródło
TempData
pociągnie to za sobą coś potencjalnie znacznie bardziej skomplikowanego (sesja) niż prosty słownik przekazywany z metody do metodyGdy akcja zwraca wynik RedirectToAction, powoduje przekierowanie HTTP (odpowiednik Response.Redirect). Dane można zachować we właściwości (słowniku) TempData kontrolera na czas trwania pojedynczego żądania przekierowania HTTP.
źródło
ViewData:
ViewData
jest typem słownikapublic ViewDataDictionary ViewData { get; set; }
ControllerBase
, która jest elementem nadrzędnymController
klasyTempData:
TempData
do użytku wewnętrznegoTempDataDictionary
:public TempDataDictionary TempData { get; set; }
TempDataDictionary
obiektu:To zachowanie jest nowe w ASP.NET MVC 2 i nowszych wersjach. We wcześniejszych wersjach ASP.NET MVC wartości w
TempData
były dostępne tylko do następnego żądania.Zobacz szczegółowe porównanie ViewData, ViewBag, TempData i Session w MVC
źródło
To porównanie okazało się przydatne: http://www.dotnet-tricks.com/Tutorial/mvc/9KHW190712-ViewData-vs-ViewBag-vs-TempData-vs-Session.html
Jednym z problemów, na które się natknąłem, jest to, że wartości TempData są usuwane po ich domyślnym odczytaniu. Istnieją opcje, zobacz metody „Peek” i „Keep” w Msdn, aby uzyskać więcej informacji .
źródło
Dane widoku są używane, gdy chcemy przekazać dane z kontrolera do odpowiedniego widoku. dane widoku mają bardzo krótką żywotność, co oznacza, że zostaną zniszczone, gdy nastąpi przekierowanie. Przykład (kontroler):
public ViewResult try1() { ViewData["DateTime"] = DateTime.Now; ViewData["Name"] = "Mehta Hitanshi"; ViewData["Twitter"] = "@hitanshi"; ViewData["City"] = "surat"; return View(); }
try1.cshtm
<table> <tr> <th>Name</th> <th>Twitter</th> <th>Email</th> <th>City</th> <th>Mobile</th> </tr> <tr> <td>@ViewData["Name"]</td> <td>@ViewData["Twitter"]</td> <td>@ViewData["City"]</td> </tr> </table>
TempData przesyła dane między administratorami lub między akcjami. Służy do przechowywania jednorazowych wiadomości, a jego żywotność jest bardzo krótka. Możemy użyć TempData.Keep (), aby udostępnić ją we wszystkich akcjach lub uczynić ją trwałą.
Przykład (kontroler):
public ActionResult try3() { TempData["DateTime"] = DateTime.Now; TempData["Name"] = "Ravina"; TempData["Twitter"] = "@silentRavina"; TempData["Email"] = "[email protected]"; TempData["City"] = "India"; TempData["MobNo"] = 9998975436; return RedirectToAction("TempView1"); } public ActionResult TempView1() { return View(); }
TempView1.cshtm
<table> <tr> <th>Name</th> <th>Twitter</th> <th>Email</th> <th>City</th> <th>Mobile</th> </tr> <tr> <td>@TempData["Name"]</td> <td>@TempData["Twitter"]</td> <td>@TempData["Email"]</td> <td>@TempData["City"]</td> <td>@TempData["MobNo"]</td> </tr> </table>
źródło
Tylko uwaga na marginesie TempData.
Dane w nim są przechowywane nie do następnego żądania , ale do wywołania następnej operacji odczytu !
Zobacz:
TempData nie zniszczy po drugim żądaniu
źródło