ViewBag, ViewData ve TempData – ASP.NET MVC

ViewBag, ViewData ve TempData ASP.NET MVC’deki nesnelerdir. Bu nesneler controller üzerinden view yapısına çeşitli verileri iletmek için kullanılır.

ViewBag Nedir?

ViewBag, verileri Controller’dan View’e iletmek için tasarlanan dinamik bir nesnedir. ViewBag yapısı verileri ViewBag nesnesinin bir özelliği olarak iletir. ViewBag yapısının verileri okumak veya null kontrolü için bir typecast’e ihtiyacı yoktur. Yani taşıdığı veriler için bir tür belirlemeye ihtiyaç durmaz. ViewBag içerisinde herhangi bir yapıdaki veriyi veya dosyayı saklayabilirsiniz. ViewBag’in kapsamı geçerli istekle sınırlıdır ve yeniden yönlendirme sırasında değeri boş olur.

ViewBag Örnek Kullanım

//Controller Code
public ActionResult Index()
{
    ViewBag.Title = "Öğrenciler";

    List<string> Student = new List<string>();
    Student.Add("Fatih");
    Student.Add("Beyazıt");
    Student.Add("Cem");

    ViewBag.Student = Student;
    return View();
}

//View code
<h3>@ViewBag.Title</h3>
<ul>
    @{
        foreach (var student in ViewBag.Student)
        {
            <li>@student</li>            
        }
    }
</ul>

ViewData Nedir?

ViewData, verileri Controllerdan View’e aktarmak için kullanılan bir dictionary (sözlük) nesnesidir; burada veriler, key/value çifti biçiminde iletilir. Null veya Complex veriler kontrolü sağlamamız gerekiyorsa, verileri View’de okumak için typecasting (tip belirleme) gerekir. ViewData’nın kapsamı, ViewBag’e benzer ve geçerli istekle sınırlıdır ve yeniden yönlendirme sırasında ViewData’nın değeri boş olur.

ViewData Örnek Kullanım

//Controller Code
public ActionResult Index()
{
    ViewData["Title"] = "Öğrenciler";

    List<string> Student = new List<string>();
    Student.Add("Fatih");
    Student.Add("Beyazıt");
    Student.Add("Cem");

    ViewData["Student"] = Student;
    return View();
}

//View code
<h3>@ViewData["Title"].ToString()</h3>
<ul>
@{
    foreach (var student in ViewData["Student"] as List<string>)
    {
        <li>@student</li>
    }
 }
</ul>

TempData Nedir?

TempData, verileri aynı Controller’dan veya farklı Controller’da bir metotdan diğerine taşımak için bir TempDataDictionary sınıfından türeyen bir nesnesidir. TempData nesnesi, bir session (oturum) gibi kısa süreliğine saklanan verilerdir. TempData, verileri HTTP isteği süresi boyunca tutar; bu, verileri iki ardışık istek arasında tuttuğu anlamına gelir. Tempdata yapısında verileri okumadan veya null denetim yapmak için typecasting (tip belirleme) gerekir. TempData yapısının kapsamı bir sonraki istekle sınırlıdır. Eğer Tempdata’nın daha da erişilebilir olmasını istiyorsak, Keep ve peek’i kullanmalıyız.

TempData Örnek Kullanım

//Controller Code
public ActionResult Index()
{
    TempData["Title"] = "Öğrenciler";

    List<string> Student = new List<string>();
    Student.Add("Fatih");
    Student.Add("Beyazıt");
    Student.Add("Cem");

    TempData["Student"] = Student;
    return View();
}

//View code
<h3>@TempData["Title"].ToString()</h3>
<ul>
@{
    foreach (var student in TempData["Student"] as List<string>)
    {
        <li>@student</li>
    }
 }
</ul>
ViewDataViewBagTempData
Bir Key-Value Dictionary koleksiyondur.Bir Object tipindedir.Bir Key-Value Dictionary koleksiyondur.
ControllerBase sınıfının dictionary object özelliğidir.ControllerBase sınıfının Dynamic özelliğidir.ControllerBase sınıfının dictionary object özelliğidir.
ViewData, ViewBag’den Daha Hızlıdır.ViewBag, ViewData’dan daha yavaştır.Belirsiz.
MVC 1.0 ve üstünde desteklenir.MVC 3.0 ve üstünde desteklenir.MVC 1.0 ve üstünde desteklenir.
.net framework 3.5 ve üstünde desteklenir..net framework 4.0 ve üstünde desteklenir..net framework 3.5 ve üstünde desteklenir.
Görüntülenirken tip dönüşümü gereklidir.Tip dönüşümü gerekmez Dinamic bir nesnedir.Görüntülenirken tip dönüşümü gereklidir.
Yönlendirme gerçekleşmişse değeri null olur.Yönlendirme gerçekleşmişse değeri null olur.Ardışık iki istek arasında veri iletmek için kullanılır.