ASP.NET MVC 3'de ViewBag özelliği

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.

