SEO (Arama Motoru Optimizasyonu) Mikro İnteraktif ÜCRETSİZ - Google Play'den İndirin

Asp.Net MVC'de ViewBag, ViewData ve TempData Kavramları

Asp.Net MVC'de ViewBag, ViewData ve TempData kavramlarını ve bunlar arasındaki farkları inceleyelim.

Verilerimizi MVC mimarisinde Controller katmanından, View katmanına taşımak istersek (tersi söz konusu değil) en çok kullanılan yapılar aşağıdaki gibidir.
- ViewData
- ViewBag
- TempData

Bu üç yapının kullanımı birbirine çok yakın olsa da önemli farklılıkları vardır. Şimdi bunları sırasıyla inceleyelim.

ViewData
Controller sınıfından view sayfalarına viewdatadictionary sınıfı ile veri taşınır.
ViewData ViewDatadictionary sınıfından türetilen bir dictionary nesnesidir. Dictionary mantığıyla kurgulanmıştır. Veri transfer işlemlerinde "key-value" eşleşmesinden faydalanır. Key değeri olarak string tanımlamayı kabul eder.
- ViewData kullanarak Controller üzerinden View tarafına veri çekmek için kullanılır. Tersi yapılamaz.
- Sadece geçerli istek sırasında okunabilir sonrasında yönlendirmeden sonra değeri null olacaktır.
- Veriyi değişkene almak için tip dönüşümü yapmamız gerekli.

ViewBag
- ViewBag, C# 4.0 ile gelen dinamik veri tipi özelliklerinden faydalanır, hataları runtime zamanında alınır.
- Temelde ViewData gibi Controller üzerinden View tarafına veri çekmek için kullanılır.
- Sadece geçerli istek sırasında okunabilir.
- Yönlendirme sonrasında kendini imha eder, null değer alır.
- Veriyi değişkene almak için tip dönüşümü yapmanız gerekmez.

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.
- 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.
- Farklı metotlardan çağırıp kullanabiliriz.

Şimdi bu durumları örnek ile açıklamaya çalışalım.
Boş bir MVC projesi oluşturup;
- AnasayfaController ve IletisimController adında iki adet Controller oluşturalım. Varsayılan ActionResult metodları ise Index() olarak belirleyelim.
- Controller'lar oluştu, bunlara ait View'lar oluşturalım.
Bu aşamalardan sonra proje yapısının nasıl olduğuna dair ekran görüntüsü paylaşalım.
Proje Yapısı
Asp.Net MVCde ViewBag, ViewData ve TempData Kavramları

Klasör yapısı hakkında biraz fikir edindikten sonra AnasayfaController, IletisimController, Anasayfa Index.cshtml ve Iletisim Index.cshtml yapılarını oluşturalım.
AnasayfaController
public class AnasayfaController : Controller
{
  public IActionResult Index()
  {
    ViewData["AnasayfaViewDataVerisi"] = "ViewData içerisindeki veriler";
    ViewBag.AnasayfaViewBagVerisi = "ViewBag içerisindeki veriler";
    TempData["AnasayfaTempDataVerisi"] = "TempData içerisindeki veriler";
    return View();
  }
}

Anasayfa Index.cshtml
<div class="text-center">
    <h4>Burası Anasayfa</h4>
    <p class="alert alert-info">
        <strong>ViewData["AnasayfaViewDataVerisi"]:</strong> @ViewData["AnasayfaViewDataVerisi"]
    </p>
    <p class="alert alert-info">
        <strong>ViewBag.AnasayfaViewBagVerisi:</strong> @ViewBag.AnasayfaViewBagVerisi
    </p>
    <p class="alert alert-info">
        <strong>TempData["AnasayfaTempDataVerisi"]:</strong> @TempData["AnasayfaTempDataVerisi"]
    </p>
</div>
Kod kısımlarını tamamladık. Projemizi çalıştırıp ekran görüntüsü paylaşalım.
Anasayfa Görünümü
Asp.Net MVCde ViewBag, ViewData ve TempData Kavramları

AnasayfaController'daki değerleri Anasayfa Index.cshtml içerisinden alabiliyoruz. Peki bir sonraki "Iletisim Index.cshtml" sayfasına ilerlediğimizde bu verileri alabilecek miyiz? Iletisim linkine tıklayalım.
Iletisim Linkine Tıkladığımızda
Asp.Net MVCde ViewBag, ViewData ve TempData Kavramları
Görüldüğü gibi iletişim linkine tıklayınca ViewBag, ViewData ve TempData içerisindeki veriler gelmedi. Peki veri taşımayı nasıl yapabiliriz? Bu sorunun cevabı için AnasayfaController içerisindeki Index metodunda bir değişiklik yapalım.
AnasayfaController Veri Taşıma Değişikliği
public class AnasayfaController : Controller
{
  public IActionResult Index()
  {
    ViewData["AnasayfaViewDataVerisi"] = "ViewData içerisindeki veriler";
    ViewBag.AnasayfaViewBagVerisi = "ViewBag içerisindeki veriler";
    TempData["AnasayfaTempDataVerisi"] = "TempData içerisindeki veriler";
    return RedirectToAction("Index", "Iletisim");
  }
}

AnasayfaController'ı çalıştırdığımızda bizi /Iletisim/Index sayfasına yönlendirecektir. O sayfanın View kısmında ViewBag, ViewData ve TempData içerisindeki değerleri ekrana yazdırmaya çalışalım.
Iletisim Sayfası
Asp.Net MVCde ViewBag, ViewData ve TempData Kavramları

Görüldüğü gibi sadece TempData içerisindeki veri diğer sayfaya taşınabildi. ViewBag ve ViewData değerleri çalışma esnasında (Runtime) oluşturulduğu için Controller'ın kendisine ait View'nda görüntülenebilmektedir.
Projeyi Github üzerinden indirmek için tıklayınız.

Yorumlar

Yorum Yaz

Avatar

REKLAM

DDos Koruma, Botnet Koruma, Layer 7 Saldırı koruması, Sanal sunucu, Vds sunucu

REKLAM

Çizgi Filmler

REKLAM

Çocuk Etkinlikleri Uygulaması

EN

  • Popüler
  • Yeni
  • Son Yorum