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.