.net MVC’de ViewModel, ViewBag, TempData, ViewData ve Session Farkları

.net logo

.net MVC mimarisinde Controller ve View arasında veri aktarımı farklı yollarda yapılabiliyor. Bu yazımda .net MVC’de viewmodel,viewbag,tempdata,viewdata ve session farkları nelerdir, hangisini ne zaman kullanmalıyız kısada değineceğim.

ViewModel

ViewModel diagram

ViewModel’ler bir ve ya birden fazla verinin “strongly typed” biçimde tutulduğu, veriler ile view’ler arasında köprü oluşturan nesnelerdir. Bu veriler, veritabanından gelen bir bütün tablo verisi olabilirken, tek bir satır ya da tek bir değişken olabilir. ViewModel’ler controller’den view’e veri aktarmak için özelleşmiş nesneler olduğundan required, rangre gibi doğrulama kurallarına sahip olabilirler. “strongly typed” oldukları içinde build sırasında hata kontrolünden geçerek olası değişken tipi hatalarının önüne geçmeyi sağlar.

ViewData

Viewdata Diagram

ViewData, System.Web.MVC.ViewDataDictionary sınıfından türetilmiş, tip bağımsız bir key-value ikilisidir. Veriler Veriadı -> Veri şeklinde tutulur ve controller’dan view’e veri aktarmak için kullanılırlar. Viewdatanın ömrü varolan request içinde geçerlidir. Yani controller çalışır, viewdata ile view’e gönderilir ve render edildiğinde silinir.

ViewData["degiskenadi"] = "Gönderilecek Veri";

ViewBag

ViewBagViewBag, dinamik bir nesnedir ve bu yüzden herhangi bir ön tanımlı property’e sahip değildir. İstediğiniz isimde property oluşturarak view’a gönderebilirsiniz. ViewBag’in ömrü request süresi boyunca, yani view render edilene kadardır. Herhangi bir tip kontrolü yapılmaz. System.Web.Mvc.ControllerBase.ViewBag sınıfından türetilir.

ViewBag.degiskenadi = "gönderilecek veri";

TempData

Tip bağımsız key-value çifti nesnesidir. System.Web.Mvc.TempdataDictionary sınıfından türetilir. Tempdata session nesnesini kullanarak bir requestten diğer bi requeste veri yollamak için kullanılır. Tempdata’ya atanan bir değişken, sayfa redirect olduktan sonra bir kez kullanılabilir ve kendini destroy eder. Tempdata genellikle hata/başarı mesajları gibi küçük çaplı bilgileri bir sonraki sayfaya göndermek için kullanılır.

Tempdata’yı ViewBag ve ViewData’dan ayıran özelliği, .net session’unu kullanmasıdır. Yani sunucu tarafında tutulacaktır. Birden fazla sunucuda dağıtımlı kullanıyorsanız üzerinde düşünülmesi gerekebilir.

TempData["veriadi"] = "Gönderilecek Veri"; 

Session

Session, sunucu tarafında tutulan ve destroy edilenen kadar sunucuda varolmaya devam edecek bir veri tutma tipidir. Sunucu tarafında ayarlanan store tipine göre(in-proc,out-of-proc) sık kullanımından kaçınılması gerekebilir. System.Web.SessionState nesnesinden türetilir.

Session ayrı bir yazı konusu. Sonra ele alabilirim.

Session["veriadi"] = "Veri değeri";

Özet

Sonraki requestlere data taşıma işlemi yapılmayacaksa ViewData ve ViewBag yerine ViewModek kullanılması daha doğru, hem compile ederken hata ayıklamaya imkan verir, hemde IDE tarafında intellisense desteği sağlayarak daha hızlı ve temiz kod yazılmı sağlar.

Tempdata genelde bir sonraki requeste veri göndermek, hata exceptionlarını ve hata detaylarını hata sayfasına göndermekiçin kullanılabilir.

Sessionlar ise kullanıcı login bilgisi gibi oturum süresince kullanılacak verileri tutmak için kullanılabilir.

Temel hatlarıyla .net MVC’de ViewModel,ViewBag,TempData,ViewData ve Session Farkları, ne zaman nerde kullanılır gibi sorulara yanıt vermeye çalıştım.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir