Saya melihat ViewBag
di MVC 3. Bagaimana bedanya dengan ViewData
di MVC 2?
.net
asp.net-mvc-3
difference
viewbag
viewdata
pengguna469652
sumber
sumber
Properti ViewBag secara internal disimpan sebagai pasangan nama / nilai dalam kamus ViewData .
Catatan: di sebagian besar versi pra-rilis MVC 3, properti ViewBag dinamai ViewModel seperti yang tercantum dalam cuplikan ini dari catatan rilis MVC 3:
(diedit 10-8-12) Disarankan agar saya memposting sumber info ini yang saya posting, berikut adalah sumbernya: http://www.asp.net/whitepapers/mvc3-release-notes#_Toc2_4
sumber
ViewData
danViewBag
, bukan tentangViewModel
.dynamic
dan mendukungViewBag.Message
. Satu menggunakanViewData["Message"]
sintaks lama .ViewBag vs ViewData di MVC
http://royalarun.blogspot.in/2013/08/viewbag-viewdata-tempdata-and-view.html
Kesamaan antara ViewBag & ViewData:
Perbedaan antara ViewBag & ViewData:
Contoh ViewBag & ViewData:
Memanggil dalam Tampilan
sumber
typecasting
tetapi Anda tidak menunjukkan bagaimana melakukan typecastingViewData
: Membutuhkan pengecoran tipe untuk tipe data yang kompleks dan memeriksa nilai nol untuk menghindari kesalahan.ViewBag
: Tidak memerlukan casting tipe untuk tipe data yang kompleks.Perhatikan contoh berikut:
Dan kodenya
View
adalah sebagai berikut:sumber
<h4>@ViewBag.emp.Name</h4>
akan berubah menjadi<h4>@ViewBag.Employee.Name</h4>
Semua jawaban menyarankan itu
ViewBag
dan / atauViewData
untuk meneruskan data dariController
keViews
yang salah informasi. keduanya sangat berguna untuk meneruskan data dari Views ke Layout atau Partial to Views (atau ViewComponents, dll) Ini bukan kontroler eksklusif.sebagai sampel asp.net default memilikinya di halaman tata letak:
dan dalam tampilan apa pun
Jadi, untuk mengajukan pertanyaan: "apa perbedaan antara
ViewBag
danViewData
?"Perbedaan yang paling menonjol adalah
ViewData
Kamus Sangat Diketik sementaraViewBag
jenis dinamis.Perhatikan bahwa data di dalamnya SAMA
Kapan harus menggunakan satu atau yang lain?
ViewBag
tidak mendukung nama C # yang tidak valid. Anda tidak dapat mengaksesViewData["Key With Space"]
denganViewBag
ViewBag.Something
dinamis dan Anda mungkin memiliki masalah saat memanggil metode (seperti metode ekstensi) yang perlu mengetahui parameter yang tepat pada waktu kompilasi.ViewBag
dapat memeriksa nulls pembersih sintaksis:ViewBag.Person?.Name
ViewData
memiliki semua sifat-sifat Kamus sepertiContainsKey
,Add
, dll sehingga Anda dapat menggunakanViewData.Add("somekey", "somevalue")
keep dalam pikiran mungkin membuang pengecualian.ViewData
pada pandangan membutuhkan TypeCasting sementaraViewBag
tidak.Mengetahui perbedaan halus, menggunakan satu atau yang lain lebih merupakan preferensi rasa.
Biasanya Anda dapat memikirkan
ViewBag.AnyKey
aliasViewData["AnyKey"]
sumber
Bisakah saya merekomendasikan kepada Anda untuk tidak menggunakan keduanya?
Jika Anda ingin "mengirim" data ke layar Anda, kirim objek yang sangat diketik (AKA ViewModel) karena lebih mudah untuk diuji.
Jika Anda mengikat ke beberapa jenis "Model" dan memiliki item "viewbag" atau "viewdata" acak maka itu membuat pengujian otomatis sangat sulit.
Jika Anda menggunakan ini pertimbangkan bagaimana Anda bisa merestrukturisasi dan cukup menggunakan ViewModels.
sumber
Ada beberapa perbedaan halus yang berarti Anda dapat menggunakan ViewData dan ViewBag dengan cara yang sedikit berbeda dari tampilan. Satu keuntungan diuraikan dalam posting ini http://weblogs.asp.net/hajan/archive/2010/12/11/viewbag-dynamic-in-asp-net-mvc-3-rc-2.aspx dan menunjukkan bahwa casting dapat dihindari dalam contoh dengan menggunakan ViewBag bukan ViewData.
sumber
viewdata: adalah kamus yang digunakan untuk menyimpan data antara View dan controller, Anda perlu melemparkan objek data view ke model yang sesuai dalam view untuk dapat mengambil data dari itu ...
ViewBag: adalah properti dinamis yang serupa dalam bekerja dengan data tampilan, Namun lebih baik karena tidak perlu dicor ke model yang sesuai sebelum menggunakannya dalam tampilan ...
sumber
Di bawah ini adalah perbedaan point to point tentang ViewData, ViewBag, TempData & Session. Credit / copy askforprogram.in , Ikuti tautan untuk contoh kode yang belum saya sebutkan di sini.
ViewData dalam MVC
ViewBag dalam MVC
TempData di MVC
Sesi dalam MVC
sumber
Meskipun Anda mungkin tidak memiliki keunggulan teknis untuk memilih satu format daripada yang lain, Anda harus menyadari beberapa perbedaan penting antara kedua sintaksis. Satu perbedaan yang jelas adalah bahwa ViewBag hanya berfungsi ketika kunci yang Anda akses adalah pengidentifikasi C # yang valid. Misalnya, jika Anda menempatkan nilai di ViewData ["Key With Spaces"], Anda tidak dapat mengakses nilai itu menggunakan ViewBag karena kode tidak akan dikompilasi. Masalah utama lain yang perlu dipertimbangkan adalah bahwa Anda tidak dapat memberikan nilai dinamis sebagai parameter untuk metode ekstensi. Compiler C # harus mengetahui tipe sebenarnya dari setiap parameter pada waktu kompilasi untuk memilih metode ekstensi yang benar. Jika ada parameter yang dinamis, kompilasi akan gagal. Misalnya, kode ini akan selalu gagal: @ Html.TextBox ("name", ViewBag.Name). Untuk mengatasinya, gunakan ViewData ["Name"
sumber
sumber
Dengan cara ini kita dapat membuatnya menggunakan nilai untuk meneruskan informasi antara controller ke halaman lain dengan DATA TEMP
sumber
Satu perbedaan utama yang saya perhatikan antara ViewData dan ViewBag adalah:
ViewData: itu akan mengembalikan objek tidak peduli apa yang telah Anda tetapkan ke dalam ini dan perlu mengetik lagi kembali ke tipe aslinya.
ViewBag: cukup cerdas untuk mengembalikan tipe yang tepat apa yang telah Anda tetapkan untuk itu. Tidak masalah cuaca apa pun yang telah Anda tetapkan tipe sederhana (mis. Int, string, dll.) Atau tipe kompleks.
Mis: Kode pengontrol.
Lihat Kode.
Layar OutPut.
sumber
Lihat Data
http://www.gurujipoint.com/2017/09/view-data-viewbag-and-tempdata.html
sumber
- ViewData digunakan untuk meneruskan data dari pengontrol ke tampilan
- Ini berasal dari kelas ViewDataDictionary
- Ini tersedia hanya untuk permintaan saat ini
- Memerlukan typecasting untuk tipe data yang kompleks dan memeriksa nilai-nilai nol untuk menghindari kesalahan
- Jika pengalihan terjadi, maka nilainya menjadi nol
ViewBagsumber
Di sini ViewData dan ViewBag keduanya menggunakan data pass dari Controller ke View .
1. ViewData
- ViewData adalah objek kamus yang diturunkan dari kelas ViewDataDictonary .
- Data hanya memungkinkan untuk satu permintaan, nilai-nilai ViewData akan dihapus ketika terjadi pengalihan halaman.
- Nilai ViewData harus diketikkan sebelum digunakan.
Contoh: Di Kontroler
Dalam penglihatan
- Dengan ViewData adalah pasangan seperti Kunci dan Nilai , Pesan adalah Kunci dan dalam nilai koma terbalik adalah Nilai.
- Data sederhana sehingga kita tidak bisa menggunakan typecasting di sini jika data kompleks kemudian menggunakan tipe casting.
- Dalam Lihat data dapat diekstraksi sebagai
2. ViewBag
--ViewBag menggunakan fitur dinamis. Wrapper ViewView sekitar ViewData.
- Dalam casting tipe ViewBag diperlukan.
- Sama seperti ViewData, jika pengalihan terjadi, nilai menjadi nol.
Contoh:
Dalam penglihatan
--Untuk tipe yang kompleks gunakan ViewBag
- Dalam Lihat data dapat diekstraksi sebagai
- perbedaan utama adalah ViewBag tidak diperlukan typecasting tetapi ViewData diperlukan typecasting.
sumber
ViewBag dan ViewData adalah dua cara yang digunakan untuk meneruskan informasi dari controller ke view di ASP.Net MVC. Tujuan menggunakan kedua mekanisme ini adalah untuk menyediakan komunikasi antara controller dan View. Keduanya memiliki umur pendek yaitu nilai keduanya menjadi nol setelah pengalihan terjadi yaitu, setelah halaman dialihkan dari halaman sumber (di mana kami menetapkan nilai ViewBag atau ViewData) ke halaman target, baik ViewBag dan juga ViewData menjadi nol.
Meski memiliki kesamaan ini baik (ViewBag dan ViewData) adalah dua hal yang berbeda jika kita berbicara tentang implementasi keduanya. Perbedaannya adalah sebagai berikut:
1.) Jika kita menganalisis kedua implementasi dengan bijak maka kita akan menemukan bahwa ViewData adalah struktur data kamus - Kamus Objek berasal dari ViewDataDictionary dan dapat diakses menggunakan string sebagai Kunci untuk nilai-nilai ini sementara ViewBag menggunakan fitur dinamis yang diperkenalkan pada C # 4.0 dan adalah properti yang dinamis.
2.) Ketika mengakses nilai dari ViewData, kita perlu mengetikkan nilai (datatypes) karena mereka disimpan sebagai Objects dalam kamus ViewData tetapi tidak ada kebutuhan seperti itu jika kita mengakses nilai th dalam kasus ViewBag.
3.) Di ViewBag kita dapat menetapkan nilai seperti ini:
dan dapat mengakses sebagai berikut:
Sedangkan dalam kasus ViewData nilai-nilai dapat diatur dan diakses sebagai berikut: Mengatur ViewData sebagai berikut:
dan mengakses nilai seperti ini
Untuk lebih jelasnya klik di sini:
sumber