Asp.NET MVC’de TempData İle Veri Taşıma ve Actionlar Arasında Veri Transferi

Bildiğiniz gibi Asp.NET MVC mimarisinde genellikle verileri taşımak için ViewBag ve ViewData nesnelerini kullanırız.Bu nesnelerin yanında daha esnek bir çalışma prensibine sahip olan TempData kontrolünü sizlere tanıtacağım.Tabi ki de yazımızı dahada anlamlandırmak için bu üç kontrol üzerinden seyredeceğiz ve aralarındaki temel farkı net bir şekilde göreceğiz.

Öncelikle ViewBag ve ViewData nesnelerini, TempData nesnesinde karşılaştırma yapabilmek için hemen tanıtalım.

ViewData Nesnesi
Controller ile ilgili Action arasında bağ kuran bir veri taşıma nesnesidir.ViewDataDictionary(ViewData) sınıfı ile veri taşımakta olup aşağıdaki gibi bir kullanımı vardır.

            ViewData["Ad"] = "Gençay Yıldız";

Gördüğünüz gibi köşeli parantezler içine verdiğimiz “key/value” syntax sayesinde değerine ulaşabileceğimiz bir yapı sunmaktadır.

ViewBag Nesnesi
ViewBag nesnesi Run Time’da oluşan ve dinamik bir yapı sergileyen veri taşıma nesnesidir.
Kullanımı aşağıdaki gibidir.

            ViewBag.Ad = "Gençay Yıldız";

Gördüğünüz gibi ViewBag yazıp .(nokta) dediğimiz zaman verdiğimiz herhangi bir isim Run Time anında oluşturulacak değişkeni tanımlamaktadır.İstediğiniz ismi verebilirsiniz.Bir nevi anlayacağınız ViewData’nın dinamik(Run Time Binding) halidir.

TempData Nesnesi
Yukarıdaki iki nesneyle temelde aynı veri taşıma işlevini gören TempData nesnesi, ViewData gibi bir kullanım tarzına sahiptir.

            TempData["Ad"] = "Gençay Yıldız";

Peki bu üç nesneninden birbirinden ayıran özellikleri nelerdir?
Bu sorunun cevabını ViewBag nesnesinden başlayarak verelim.
ViewBag nesnesini dinamik(dynamic) tipte bir nesne olduğundan dolayı, olası hatalar Compile Time(derleme zamanı)’da değil Run Time(çalışma zamanı)’da yakalanacaktır.Bu fark yanında söz dizimiyle beraber teknik açıdan ViewData nesnesinden hiç bir farkı yoktur.

TempData nesnesine gelirsek eğer, diğer ikisine nazaran en büyük farkı yaratmaktadır.ViewBag ve ViewData nesneleri o anki HTTP istek içerisinde geçerlidir ve yaşam döngüleri bir sonraki isteğe kadardır.Haliyle genellikle tek Action metod ve o Action metoda bağlı View üzerinde tek seferlik işlev görmektedirler.Lakin TempData nesnesi, o anki HTTP ister tarafından üretilip bir ve birden fazla View ve Action üzerinde kullanım esnekliği sunmaktadır.Bu anlamda yaşam döngüsü diğer ikisine nazaran daha geniştir.

Artık bu makalemizde temel içerik olarak teşkil edecek olan TempData nesnesinin bu esnekliği ve Action metodlar arasında hızlı veri taşımasına geçiş yapabiliriz.

Şimdi aşağıdaki kod yapısını oluşturup inceleyelim.

    public class HomeController : Controller
    {
        public ActionResult Index()
        {

            ViewData["Veri"] = "Bu bir ViewData'da taşınan veridir.";
            ViewBag.Veri = "Bu bir ViewBag'de taşınan veridir.";
            TempData["Veri"] = "Bu bir TempDate'da taşınan veridir.";

            return View();
        }
    }

Hemen Index.cshtml sayfamızıda aşağıdaki gibi oluşturalım.

@ViewData["Veri"]<br />
@ViewBag.Veri<br />
@TempData["Veri"]

Asp.NET MVC'de TempData İle Veri Taşıma ve Actionlar Arasında Veri Transferi

Gördüğünüz gibi tüm veri taşıma kontrollerimiz temel işlevi olan veri transferini View katmanında gerçekleştirmiştir.

Şimdi aşağıdaki kullanımı inceleyiniz.

    public class HomeController : Controller
    {
        public ActionResult Index()
        {

            ViewData["Veri"] = "Bu bir ViewData'da taşınan veridir.";
            ViewBag.Veri = "Bu bir ViewBag'de taşınan veridir.";
            TempData["Veri"] = "Bu bir TempDate'da taşınan veridir.";

            return RedirectToAction("Ornek");
        }

        public ActionResult Ornek()
        {
            var ViewDataVeri = ViewData["Veri"];
            var ViewBagVeri = ViewBag.Veri;
            var TempDateVeri = TempData["Veri"];

            return View();
        }
    }

Yukarıdaki kod bloğunu incelerseniz eğer, Index Action’ında oluşturulan veri taşıma nesnelerimizi Ornek Action’ında kullanmaya çalışıyoruz.Projeyi çalıştırdığımız zaman öncelikle Index Action’ını çalıştıralım ve ardından Ornek Action’ına bir yönlendirme yapılacaktır.Bakalım Index Action’ınında yüklenen veri elemanlarımız Ornek Action’ına veri transferini sağlayabilecekler mi?

Asp.NET MVC'de TempData İle Veri Taşıma ve Actionlar Arasında Veri Transferi - 2

Gördüğünüz gibi ViewData boş geldi.

Asp.NET MVC'de TempData İle Veri Taşıma ve Actionlar Arasında Veri Transferi - 3

Gördüğünüz gibi ViewBag’te boş geldi.

Asp.NET MVC'de TempData İle Veri Taşıma ve Actionlar Arasında Veri Transferi - 4

Ama TempData veriyi taşımayı başarabildi.

Gördüğünüz gibi TempDate nesnesi sayesinde Asp.NET MVC mimarisinde Actionlar arasında rahatça veri transfer edebiliyoruz.Lakin burada bir hususa dikkat edilmesi gerekiyor.

TempData ile tutulan veri sayfa refresh ya da Post – Back edildiği zaman uçup gitmektedir.Böyle bir durumda olası binlerce hatayla karşılaşabilir, neye uğradığınıza şaşırabilirsiniz.O yüzden Action’lar arasında taşınacak her veriyi TempData ile tutmanız çokta sağlam temellere dayanan bir inşaa süreci göstermemektedir.

Eğer amacınız küçük ve anlık verileri Action’lar arasında transfer etmek ise TempData’yı kullanmanızı tavsiye ederim.

Bu yazımızında sonuna gelmiş bulunmaktayız.
Sonraki yazılarımda görüşmek üzere…
Hepinizi iyi çalışmalar diliyorum…

Kaynak : http://www.muratoner.net/makale/aspnet-mvc-viewbag-viewdata-tempdata-ile-veri-tasima-1488.html, http://www.aspmvcnet.com/tr/m/razor/viewbag-viewdata-ve-tempdata-asp-net-mvc-3-kullanimi-ve-farklari.html

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

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

*