ViewData ve TempData Arasındaki Fark?


95

ViewData'nın ne olduğunu ve her zaman kullandığını biliyorum, ancak ASP.NET Preview 5'te TempData adlı yeni bir şey tanıttılar.

Normalde nesnelerin sözlüğü yaklaşımını kullanmak yerine ViewData'mı kesinlikle yazıyorum.

Peki, ViewData yerine TempData'yı ne zaman kullanmalıyım?

Bunun için herhangi bir en iyi uygulama var mı?


Buraya bir şey eklemek TempDataistiyorum stackoverflow.com/a/17199709/2015869
Imad Alazani

Yanıtlar:


96

Tek bir cümleyle: TempDataBir farkla ViewData gibidir: Yalnızca birbirini izleyen iki istek arasındaki verileri içerir, daha sonra yok edilirler. TempDataHata mesajlarını veya benzer bir şeyi iletmek için kullanabilirsiniz .

Modası geçmiş olmasına rağmen, bu makaleTempData yaşam döngüsünün iyi bir açıklamasına sahiptir .

Ben Scheirman'ın burada söylediği gibi :

TempData, tek bir istek için kullanılabilen, oturum destekli bir geçici depolama sözlüğüdür. Denetleyiciler arasında mesaj iletmek harika.


Bence bu oldukça büyük bir fark, bu TempDatapotansiyel olarak yöntemden yönteme geçen basit bir sözlükten çok daha karmaşık bir şey (oturum) içerecek
Matti Virkkunen

29

Bir eylem bir RedirectToAction sonucu döndürdüğünde, bir HTTP yeniden yönlendirmesine neden olur (Response.Redirect'e eşdeğer). Veriler, tek bir HTTP yeniden yönlendirme isteği süresince denetleyicinin TempData özelliğinde (sözlük) korunabilir.


ViewData değeri aynı durumda korunacak mı?
IsmailS

9
@Ismail: Hayır, ViewData verileri Yeniden Yönlendirme yoluyla korumaz. TempData'nın temel farkı budur.
Mariano Desanze

5

Veriyi gör:

  • ViewData bir sözlük türüdür public ViewDataDictionary ViewData { get; set; }
  • Denetleyiciden görünüme veri aktarmak için kullanılabilir, yalnızca tek yol
  • Hayat sadece mevcut istek sırasında yatıyor
  • Dize geçiriyorsanız, o zaman yazmaya gerek yok
  • Nesneyi geçiyorsanız, onu yazmanız gerekir, ancak bundan önce boş olup olmadığını kontrol etmeniz gerekir.
  • Sınıfın ControllerBaseebeveyni olan bir özellikController

TempData:

  1. TempDatadahili kullanım TempDataDictionary:public TempDataDictionary TempData { get; set; }
  2. Veriler TempDataDictionarynesneye kaydedildiğinde :
    • İçinde kalır ve herhangi bir denetleyicideki herhangi bir görünümden veya herhangi bir işlemden okunabilir
    • Yalnızca bir kez okunabilir; okunduktan sonra boş olur
    • Oturuma kaydedilir, böylece oturum verileri sona erdiğinde kaybolur.

Bu davranış, ASP.NET MVC 2 ve sonraki sürümlerde yenidir. ASP.NET MVC'nin önceki sürümlerinde, içindeki değerler TempDatayalnızca bir sonraki isteğe kadar kullanılabilirdi.

  1. Okunana veya oturumun süresi dolana kadar canlıdır ve her yerden okunabilir.

ViewData, ViewBag, TempData ve Session'ın MVC'deki karşılaştırmasına ayrıntılı olarak bakın



0

verileri denetleyiciden karşılık gelen görünüme geçirmek istediğimizde verileri görüntüle kullanılır. görünüm verilerinin ömrü çok kısadır, bu, yeniden yönlendirme gerçekleştiğinde yok olacağı anlamına gelir. Örnek (Denetleyici):

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, verileri denetleyiciler arasında veya eylemler arasında aktarır. Tek seferlik mesajları saklamak için kullanılır ve ömrü çok kısadır. TempData.Keep () 'i tüm eylemler aracılığıyla kullanılabilir hale getirmek veya kalıcı hale getirmek için kullanabiliriz.

Örnek (Denetleyici):

public ActionResult try3()
    {
        TempData["DateTime"] = DateTime.Now;
        TempData["Name"] = "Ravina";
        TempData["Twitter"] = "@silentRavina";
        TempData["Email"] = "Ravina12@gmail.com";
        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>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.