Bisakah ada yang menjelaskan, kapan harus digunakan
- TempData
- ViewBag
- ViewData
Saya memiliki persyaratan, di mana saya harus menetapkan nilai dalam satu controller, bahwa controller akan mengarahkan ke Controller Two dan Controller Two akan membuat tampilan.
Saya telah mencoba menggunakan ViewBag, nilainya akan hilang pada saat saya mencapai Controller Two.
Bisakah saya tahu kapan harus menggunakan dan kelebihan atau kekurangan?
Terima kasih
asp.net-mvc-3
Hari Gillala
sumber
sumber
Jawaban:
Memungkinkan Anda menyimpan data yang akan bertahan untuk pengalihan. Secara internal ia menggunakan Sesi sebagai backing store, setelah pengalihan dibuat data secara otomatis diusir. Polanya adalah sebagai berikut:
Memungkinkan Anda menyimpan data dalam aksi pengontrol yang akan digunakan dalam tampilan yang sesuai. Ini mengasumsikan bahwa tindakan mengembalikan tampilan dan tidak mengarahkan. Hidup hanya selama permintaan saat ini.
Polanya adalah sebagai berikut:
dan dalam tampilan:
atau dengan ViewData:
dan dalam tampilan:
ViewBag
hanya pembungkus dinamisViewData
dan hanya ada di ASP.NET MVC 3.Dikatakan demikian, tidak satupun dari dua konstruksi itu yang boleh digunakan. Anda harus menggunakan model tampilan dan tampilan yang sangat diketik. Jadi pola yang benar adalah sebagai berikut:
Lihat model:
Tindakan:
Tampilan sangat diketik:
Setelah pengantar singkat ini, mari jawab pertanyaan Anda:
dan tampilan yang sesuai (
~/Views/Two/Index.cshtml
):Ada juga kelemahan menggunakan TempData: jika pengguna menekan F5 pada halaman target, data akan hilang.
Secara pribadi saya juga tidak menggunakan TempData. Itu karena secara internal menggunakan Sesi dan saya menonaktifkan sesi di aplikasi saya. Saya lebih suka cara yang lebih tenang untuk mencapai ini. Yaitu: dalam tindakan pengontrol pertama yang melakukan pengalihan menyimpan objek di penyimpanan data Anda dan pengguna id unik yang dihasilkan saat mengarahkan. Kemudian pada tindakan target gunakan id ini untuk mengambil kembali objek yang awalnya disimpan:
Tampilannya tetap sama.
sumber
ViewBag.Title
properti pada semua Tampilan saya yang digunakan dalam_Layout.cshtml
file tampilan basis saya . Kasus lain di mana saya menggunakannya adalah memberikan info-pesan (mis. "Produk berhasil disimpan!") Kepada pengguna. Saya menempatkan beberapa markup umumLayout.cshtml
untuk membuat pesan jika disediakan dan ini memungkinkan saya untuk mengaturViewBag.Message
dalam Tindakan apa pun. Menggunakan properti ViewModel untuk kedua kasus memiliki terlalu banyak kerugian.ViewBag
. Tolong jelaskan skenario dunia nyata yang spesifik, ketika ViewBag digunakan. Karena Anda mengatakan itu, saya mengutip sumber daya yang kuat , saya kira Anda memiliki beberapa kasus khusus di mana sumber daya yang kuat ini kuat . Karena saya tidak pernah menggunakannya dalam karir saya, saya akan sangat senang mengetahui bagaimana orang menggunakan senjata yang kuat ini .ASP.NET MVC menawarkan kepada kami tiga opsi ViewData, ViewBag, dan TempData untuk meneruskan data dari controller untuk melihat dan dalam permintaan berikutnya. ViewData dan ViewBag hampir serupa dan TempData melakukan tanggung jawab tambahan. Mari kita bahas atau dapatkan poin-poin penting pada ketiga objek tersebut:
Kesamaan antara ViewBag & ViewData:
Perbedaan antara ViewBag & ViewData:
Contoh ViewBag & ViewData:
Dalam penglihatan:
TempData:
TempData juga merupakan kamus yang diturunkan dari kelas TempDataDictionary dan disimpan dalam sesi live pendek dan merupakan kunci string dan nilai objek. Perbedaannya adalah bahwa siklus hidup objek. TempData menyimpan informasi untuk saat Permintaan HTTP. Ini berarti hanya dari satu halaman ke halaman lainnya. Ini juga berfungsi dengan pengalihan 302/303 karena itu dalam Permintaan HTTP yang sama. Membantu menjaga data saat Anda berpindah dari satu pengontrol ke pengontrol lain atau dari satu aksi ke aksi lainnya. Dengan kata lain ketika Anda mengarahkan ulang, "TempData" membantu menjaga data antara pengalihan tersebut. Secara internal menggunakan variabel sesi. Temp menggunakan data selama permintaan saat ini dan selanjutnya hanya berarti itu digunakan ketika Anda yakin bahwa permintaan berikutnya akan diarahkan ke tampilan berikutnya. Ini membutuhkan typecasting untuk tipe data yang kompleks dan memeriksa nilai-nilai nol untuk menghindari kesalahan.
Mekanisme terakhir adalah Sesi yang berfungsi seperti ViewData, seperti Kamus yang mengambil string untuk kunci dan objek untuk nilai. Yang ini disimpan ke dalam Cookie klien dan dapat digunakan untuk waktu yang jauh lebih lama. Perlu verifikasi lebih lanjut untuk tidak pernah memiliki informasi rahasia. Mengenai ViewData atau ViewBag Anda harus menggunakannya secara cerdas untuk kinerja aplikasi. Karena setiap tindakan melewati seluruh siklus hidup permintaan mvc asp.net biasa. Anda bisa menggunakan ViewData / ViewBag dalam aksi anak Anda tetapi berhati-hatilah karena Anda tidak menggunakannya untuk mengisi data yang tidak terkait yang dapat mencemari pengontrol Anda.
sumber
TempData
Pada dasarnya ini seperti DataReader, setelah dibaca, data akan hilang.
Lihat Video ini
Contoh
Jika Anda memperhatikan kode di atas, RedirectToAction tidak memiliki dampak terhadap TempData hingga TempData dibaca. Jadi, begitu TempData dibaca, nilainya akan hilang.
Bagaimana saya bisa menjaga TempData setelah membaca?
Periksa output di Action Metode Test 1 dan Test 2
Jika Anda memperhatikan kode di atas, data tidak hilang setelah RedirectToAction serta setelah Membaca Data dan alasannya adalah, Kami menggunakan
TempData.Keep()
. Apakah ituDengan cara ini Anda dapat membuatnya bertahan selama yang Anda inginkan di pengontrol lain juga.
ViewBag / ViewData
Data akan tetap ada pada Tampilan yang sesuai
sumber
TempData di Asp.Net MVC adalah salah satu fitur yang sangat berguna. Ini digunakan untuk meneruskan data dari permintaan saat ini ke permintaan berikutnya. Dengan kata lain jika kita ingin mengirim data dari satu halaman ke halaman lain saat pengalihan terjadi, kita dapat menggunakan TempData, tetapi kita perlu melakukan beberapa pertimbangan dalam kode untuk mencapai fitur ini di MVC. Karena kehidupan TempData sangat singkat dan terletak hanya sampai tampilan target terisi penuh. Tapi, kita bisa menggunakan metode Keep () untuk bertahan data di TempData.
Baca lebih banyak
sumber
ViewBag, ViewData, TempData, dan View State dalam MVC
http://royalarun.blogspot.in/2013/08/viewbag-viewdata-tempdata-and-view.html
ASP.NET MVC menawarkan kepada kami tiga opsi ViewData, VieBag dan TempData untuk meneruskan data dari controller untuk melihat dan dalam permintaan berikutnya. ViewData dan ViewBag hampir serupa dan TempData melakukan tanggung jawab tambahan.
Kesamaan antara ViewBag & ViewData:
Perbedaan antara ViewBag & ViewData:
Contoh ViewBag & ViewData:
Dalam Lihat, kami memanggil seperti di bawah ini:
TempData:
Satu-satunya skenario di mana menggunakan TempData akan bekerja dengan andal adalah ketika Anda mengarahkan ulang. Ini karena pengalihan membunuh permintaan saat ini (dan mengirimkan kode status HTTP 302 Objek Pindah ke klien), kemudian membuat permintaan baru di server untuk melayani tampilan yang dialihkan.
Ini membutuhkan typecasting untuk tipe data yang kompleks dan memeriksa nilai-nilai nol untuk menghindari kesalahan.
sumber
sumber
TempData akan selalu tersedia hingga dibaca pertama, setelah Anda membacanya, itu tidak tersedia lagi dapat berguna untuk menyampaikan pesan cepat juga untuk melihat yang akan hilang setelah membaca pertama. ViewBag Ini lebih berguna ketika meneruskan sepotong data dengan cepat ke tampilan, biasanya Anda harus meneruskan semua data ke tampilan melalui model, tetapi ada kasus ketika Anda memodelkan datang langsung dari kelas yang memetakan ke dalam database seperti kerangka kerja entitas dalam hal ini Anda tidak apa yang akan mengubah model Anda untuk melewatkan data baru, Anda dapat memasukkannya ke dalam viewbag ViewData hanya versi indeks dari ViewBag dan digunakan sebelum MVC3
sumber
Lingkupnya juga berbeda antara viewbag dan temptdata. viewbag didasarkan pada tampilan pertama (tidak dibagi antara metode tindakan) tetapi temptdata dapat dibagi antara metode tindakan dan hanya satu sama lain.
sumber