ViewBag, ViewData ve TempData ASP.NET MVC 3 Kullanımı ve Farkları

Asp.net mvc ile birlikte gelen ViewBag , ViewData ve TempData özellikleri, sıklıkla ne zaman hangisini kullansak daha iyi, yada hangisi performans için daha avantajlı gibisinden sorularıda beraberinde getiriyor. Sebebi ise ViewBag , ViewData ve TempData kullanımlarının birbirlerine çok yakınlığıdır.

ViewBag , ViewData ve TempData ; Bu üç asp.net mvc nesnesi belirgin özelliği küçük boyutlardaki verilerimizi Controller dan View kısmına aktarmak için kullanırız.

Bu makelemizde aradaki farkı biraz daha asp.net mvc 3 ile yazılmış olan kodda izah etmeye çalışacağım.

Öncelikle ViewData ve ViewBag aynı çalışma mantığına sahip olmakla beraber ViewData ; asp.net mvc, asp.net mvc 2 ve asp.net mvc3 de çalışmaktadır. Fakat ViewBag asp.net mvc 3 ile birlikte gelen yeni ve runtime içerisinde oluşan dinamik bir asp.net mvc 3 nesnesidir. ViewData kullanımında köşeli parentez içerisine (ViewData["Test"] ) içerisine yazdığımız anahtar kelime ( key = Test) sayesinde diğer ViewData lardan ayırmış oluruz. ViewData nesneside birden fazla farklı nesne ayırmasını ViewDataDictionary sınıfı aracılıyla, "key/value" syntax sayesinde çözümlemiş olur.

TempData ise çok basit bir çalışma mantığı vardır. Bunu kısaca açıklamak gerekirse herhangi Controller dan oluşturulmuş olan veriyi Views ler arasında taşımamıza veya tek bir View içerisinde elimizdeki veriyi ekran çıktısı olarak görüntüler.

Yeri gelmişken deyinmek istiyorum, Eğer ki büyük bir nesneyi Controller dan Views göndermemiz gerecekse; mesale, raporlama gibi büyük boyutlardaki verilerimiz için ViewModels kullanmalıyız.

ViewBag , ViewData ve TempData çalışma senoryası olarak şekil -1 -2 -3 deki gibi çalışmaktadır.

Şekil-1

Şekil-2

Şekil-3

ViewBag , ViewData ve TempData aralarındaki en büyük fark ise TempData nesnesini eğer ki bir daha kullanmak istersek bir sonraki redirek ettiğimiz actionda herhangi bir işleme mağruz kalmadan kullanabiliriz. Fakat ViewBag ve ViewData nesnelerine ulaşamayız. Şekil-4-5-6 dada bununla ilgili koddaki küçük bir değişiklik ile RedirectResult(@"~\Home\About\"); TempData nesnesine tekrar ulaşmamız mümkündür.


Şekil-4

Şekil-5

Şekil-6
Önemli Not: TempData nesnesine gönderdiğimiz her veri adından da anlaşıldığı gibi geçici olduğundan, projemizde ilgili web sayfamız eğer ki tekrardan postback olursa veriye tekar ulaşamayız.Bu örnekteki, Test için tekrardan şekil-6 daki sayfayı ( F5 ) yenilersek, TempData nesnesinin kaybolduğunu görürüz.
Makalemizle ilgili soru ve önerileriniz için yorum yazmayı unutmayınız.
İyi çalışmalar dileriz.
Kod indir : ViewBag, ViewData ve TempData ASP.NET MVC 3 Kullanımı
Makale Tarihi: 31.07.2015 Gücellenme Tarihi: 10.07.2016

Yorumlar

İsim: hasdsan

Tarih: 10.5.2016 22:54:34

Çok yardımcı oldu teşekkürler

Tarih: 11.10.2016 10:54:20

Biz de ilginiz için teşekkür ederiz.


Yorum Yaz

Yorumlarınız denetimden geçtikten sonra yayınlanmaktadır...