it-swarm.com.de

Unterschied zwischen ViewData und TempData?

Ich weiß, was ViewData ist und verwende es ständig, aber in ASP.NET Preview 5 wurde etwas Neues namens TempData eingeführt. 

Normalerweise tippe ich meine ViewData stark ein, anstatt den Dictionary of Objects-Ansatz zu verwenden.

Wann sollte ich TempData anstelle von ViewData verwenden?

Gibt es dafür Best Practices? 

91
Elijah Manor

In einem Satz: TempData sind wie ViewData mit einem Unterschied: Sie enthalten nur Daten zwischen zwei aufeinanderfolgenden Anforderungen, danach werden sie zerstört. Sie können TempData verwenden, um Fehlermeldungen oder ähnliches zu übergeben.

Obwohl er veraltet ist, hat dieser Artikel eine gute Beschreibung des TempData-Lebenszyklus.

Wie Ben Scheirman sagte hier :

TempData ist ein sitzungsgestütztes temporäres Speicherwörterbuch, das für eine einzelne Anforderung verfügbar ist. Es ist großartig, Nachrichten zwischen Steuerungen weiterzuleiten.

91
Dragan Panjkov

Wenn eine Aktion ein RedirectToAction-Ergebnis zurückgibt, führt dies zu einer HTTP-Weiterleitung (entsprechend Response.Redirect). Daten können in der TempData-Eigenschaft (Wörterbuch) des Controllers für die Dauer einer einzelnen HTTP-Umleitungsanforderung beibehalten werden. 

28

Daten anzeigen:

  • ViewData ist ein Wörterbuchtyp public ViewDataDictionary ViewData { get; set; }
  • Es kann verwendet werden, um Daten von der Steuerung zur Ansicht zu übergeben
  • Das Leben liegt nur während der aktuellen Anfrage
  • Wenn Sie den String übergeben, müssen Sie keine Konvertierung durchführen
  • Wenn Sie ein Objekt übergeben, müssen Sie es typisieren. Vorher müssen Sie jedoch prüfen, ob es nicht null ist
  • Es ist eine Eigenschaft auf ControllerBase, die das übergeordnete Element der Controller-Klasse ist

TempData: 

  1. TempData verwendet intern TempDataDictionary: public TempDataDictionary TempData { get; set; }
  2. Sobald Daten in TempDataDictionary object gespeichert sind:
    • Es bleibt darin erhalten und kann von jeder Ansicht oder Aktion in einem beliebigen Controller gelesen werden
    • Es kann nur einmal gelesen werden. einmal gelesen, wird es zu null
    • Es wird in einer Sitzung gespeichert, so dass nach Ablauf der Sitzung Daten verloren gehen.

Dieses Verhalten ist neu in ASP.NET MVC 2 und den späteren Versionen .. In früheren Versionen von ASP.NET MVC waren die Werte in TempData nur bis zur nächsten Anforderung verfügbar.

  1. Es lebt, bis es gelesen oder Sitzung abgelaufen ist und von überall gelesen werden kann.

Sehen Sie den Vergleich von ViewData, ViewBag, TempData und Session in MVC im Detail

5
Ali Adravi

Ich fand diesen Vergleich nützlich: http://www.dotnet-tricks.com/Tutorial/mvc/9KHW190712-ViewData-vs-ViewBag-vs-TempData-vs-Session.html

Ich habe festgestellt, dass TempData-Werte gelöscht werden, nachdem sie standardmäßig gelesen wurden. Es gibt Optionen, siehe die Methoden 'Peek' und 'Keep' auf Msdn für weitere Informationen .

4
testpattern

Nur eine Randnotiz zu TempData.
Die darin enthaltenen Daten werden nicht bis zum nächste Anforderung gespeichert, sondern bis zum Aufruf der nächsten Leseoperation!
Sehen:
TempData wird nach zweiter Anfrage nicht zerstört

0
nvirth

ansichtsdaten werden verwendet, wenn wir Daten von der Steuerung an die entsprechende Ansicht übergeben möchten. Die Daten haben eine sehr kurze Lebensdauer, dh sie werden bei einer Umleitung zerstört.

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 überträgt die Daten zwischen Steuerungen oder zwischen Aktionen . Es wird verwendet, um einmalige Nachrichten zu speichern, und die Lebensdauer ist sehr kurz.

Beispiel (Controller):

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>
0
Hitanshi Mehta