Perbedaan Antara ViewData dan TempData?

94

Saya tahu apa itu ViewData dan menggunakannya sepanjang waktu, tetapi di ASP.NET Preview 5 mereka memperkenalkan sesuatu yang baru yang disebut TempData.

Saya biasanya sangat mengetik ViewData saya, daripada menggunakan pendekatan kamus objek.

Jadi, kapan saya harus menggunakan TempData sebagai ganti ViewData?

Apakah ada praktik terbaik untuk ini?

Elijah Manor
sumber
Saya ingin menambahkan sesuatu tentang di TempDatasini stackoverflow.com/a/17199709/2015869
Imad Alazani

Jawaban:

94

Dalam satu kalimat: TempDataseperti ViewData dengan satu perbedaan: Mereka hanya berisi data antara dua permintaan yang berurutan, setelah itu dimusnahkan. Anda dapat menggunakan TempDatauntuk menyampaikan pesan kesalahan atau yang serupa.

Meski sudah usang, artikel ini memiliki deskripsi yang bagus tentang TempDatasiklus proses.

Seperti yang dikatakan Ben Scheirman di sini :

TempData adalah kamus penyimpanan sementara yang didukung sesi yang tersedia untuk satu permintaan tunggal. Sangat bagus untuk menyampaikan pesan antar pengontrol.

Dragan Panjkov
sumber
Saya pikir itu perbedaan yang cukup besar, karena TempDataakan melibatkan sesuatu yang berpotensi jauh lebih rumit (sesi) daripada kamus sederhana yang diteruskan dari metode ke metode
Matti Virkkunen
29

Saat suatu tindakan mengembalikan hasil RedirectToAction, tindakan itu menyebabkan pengalihan HTTP (setara dengan Response.Redirect). Data dapat disimpan dalam properti TempData (kamus) pengontrol selama satu permintaan pengalihan HTTP.

Kapten Masuk Akal
sumber
Akankah nilai ViewData dipertahankan dalam kasus yang sama?
IsmailS
9
@Ismail: Tidak, ViewData tidak akan menyimpan data melalui Pengalihan. Itulah perbedaan utama TempData.
Mariano Desanze
5

ViewData:

  • ViewData adalah tipe kamus public ViewDataDictionary ViewData { get; set; }
  • Ini dapat digunakan untuk melewatkan data dari pengontrol ke tampilan, hanya dengan satu cara
  • Hidup itu hanya terletak selama permintaan saat ini
  • Jika melewati string maka tidak perlu typecast
  • Jika lewat objek maka Anda perlu typecast tapi sebelum itu Anda perlu memeriksa apakah itu bukan null
  • Ini adalah properti pada ControllerBase, yang merupakan induk Controllerkelas

TempData:

  1. TempDatadigunakan secara internal TempDataDictionary:public TempDataDictionary TempData { get; set; }
  2. Setelah data disimpan ke dalam TempDataDictionaryobjek:
    • Itu tetap ada di dalamnya dan dapat dibaca dari tampilan apa pun atau tindakan apa pun di pengontrol apa pun
    • Itu hanya bisa dibaca sekali; sekali dibaca, itu menjadi nol
    • Itu disimpan ke dalam sesi sehingga data sesi yang kedaluwarsa akan hilang.

Perilaku ini baru dari ASP.NET MVC 2 dan versi yang lebih baru. Di versi sebelumnya dari ASP.NET MVC, nilai di TempDatahanya tersedia hingga permintaan berikutnya.

  1. Ini hidup, sampai dibaca atau sesi berakhir dan dapat dibaca dari mana saja.

Lihat perbandingan ViewData, ViewBag, TempData dan Session di MVC secara detail

Ali Adravi
sumber
0

data tampilan digunakan ketika kita ingin meneruskan data dari pengontrol ke tampilan yang sesuai. data tampilan memiliki umur yang sangat pendek artinya akan rusak saat pengalihan terjadi. Contoh (Pengontrol):

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 mentransfer data antara pengontrol atau antara tindakan. Ini digunakan untuk menyimpan pesan satu kali dan masa pakainya sangat singkat. Kita dapat menggunakan TempData.Keep () untuk membuatnya tersedia melalui semua tindakan atau membuatnya tetap ada.

Contoh (Pengontrol):

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