ASP.NET MVC geliştiricileri, daha önceki sürümlerden itibaren anahtar-değer şeklinde Controller dosyalarından, View dosyalarına veri aktarabilmek için bize ViewData özelliğini sunuyordu. Bu özelliği şu şekilde hala kullanabiliyoruz:

ViewData["Mesaj"] = "Bu bir mesajdır."; // Atama yapmak için.
@ViewData["Mesaj"] // Veriyi çekmek için.

Ama MVC 3’de, daha da kullanışlı hale getirmek isteyen geliştiriciler, şöyle bir boyut kazandırdılar:

ViewBag.Mesaj = "Bu bir mesajdır.";
@ViewBag.Mesaj // Veriyi çekmek için.

Viewbag dynamic tipinde bir özelliktir(Intellisense desteği dynamic tiplerde desteklenmiyor).Yani her sınıftan bilgiyi saklayabiliriz.ViewBag özelliğini, bir sınıfın özelliğine atama yapar ve değerini çeker gibi kullanabiliyoruz.

 

**Örnek:

**

Yeni bir MVC 3 projesi oluşturuyoruz.

HomeController.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{    

    public class Kisi
    {        

    public string Ad { get; set; }

    }

    public class HomeController : Controller
    {        

            public ActionResult Index()
        {            

            ViewData["Kisi"] = new Kisi() { Ad = "Yusuf Doru" };

                        return View();
        }
    }
}

Kisi isimli bir sınıfımız var.Index action metodumuzdaki ViewData[“Kisi”] içine yeni bir Kişi sınıfı türettik. View dosyamıza dönüyoruz.

Index.cshtml:

@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index/h2>
<h2>Sonuç:</h2>

@ViewData["Kisi"].Ad

Gördüğünüz gibi “@ViewData[“Kisi”].Ad” diyerek çekince hata alıyoruz. Peki bunu nasıl kolaylıkla çekebiliriz? BirdeViewBag ile deneyelim.

Index.cshtml:

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index/h2>
<h2>Sonuç:</h2>

@ViewBag.Kisi.Ad

Üstte gördüğünüz gibi @ViewBag.Kisi.Ad diyerek “Ad” özelliğimizi başarıyla çektik.
Şunu bilmemiz gerekir ki: ViewData ile özellik atarsak, bunu ViewBag ile de kullanabiliriz. Aynı yöntem ViewDataiçin de geçerli.
Yani:

ViewData["Mesaj"] = "Bu bir mesajdır";
@ViewBag.Mesaj // çıktı: "Bu bir mesajdır"

Bu yazımızda ViewBag özelliğini ve kolaylığını öğrenmiş olduk.