MVC ViewBag ViewData TempData Kullanımı

MVC ViewBag ViewData TempData

0 9.437

Bu makalemizde MVC üzerinde Controller view arası veri taşıma işlemlerinde kullanılan yapılardan bahsedeceğim. Veri taşıma işlemlerinde en çok kullanılan ViewBag ViewData TempData yapısıdır. Bu üç yapının kullanımı birbirine çok yakın olsa da önemli farklılıkları vardır.

ViewBag

ViewBag Controller üzerinden View’a veri taşımak için kullanılır. Tersi durum (View -Controller) söz konusu değildir.

ViewBag dinamik bir tip olduğu için runtime da derlenir ve değişken için herhangi bir isim kullanılabilir. Controller ve View taraflı belirlenen değişken ismi doğru yazılmalıdır. Aksi durumda runtime ‘ da hata almanız kaçınılmaz olur. ViewBag ile Primitive Type ve Complex Type tanımı yapılabilir. Aynı ViewBag değişkeni için birden fazla tanım yapılırsa son tanımlama geçerli olur. ViewBag’e tanımlı bir veri Redirect veya sayfanın post olması durumunda temizlenir.

View üzerinden erişim

ViewData

Hemen hemen ViewBag ile aynı yapıdadır. ViewData Controller üzerinden View ‘ a transfer için kullanılır tersi durumu desteklemez. Farklı olarak Dictionary mantığıyla kurgulanmıştır. Transfer işlemlerinde Key-Value eşleşmesinden faydalanır. Key değeri olarak string tanımlama kabul eder. ViewData ekli veriyi Request bazlı saklar ve işlem yapmadan önce value TypeCast yapmalıyız.

View üzerinden erişim

 

TempData

ViewData ile aynı kullanımdadır.  TempDataDictionary Key-Value olarak kurgulanmıştır. Diğer transfer yapılarına nazaran TempData veriyi Request bazlı saklamaz. Bu nedenle Action veya farklı Controller Action’lar arasında bir transfer işlemi yapılacaksa veya View üzeride aynı durum söz konusuysa kullanılabilir.  TempData üzerindeki veriyi üçüncü Request’e aktarmak istiyorsak Keep() metodunu kullanmalıyız.  Bu şekilde TempData LifeCycle kısa bir süre uzamış olur. TempData kullanımı öncesinde ViewData’da olduğu gibi TypeCast işlemi yapmalıyız.

 

H.Burak Karadağ

Referans

Passing Data in an ASP.NET MVC Application

 

 

Email adresiniz yayınlanmayacaktır.