Asp.Net MVC 3 içerisinde Controller sınıfının view’e gönderdiği nesnelerin bilgileri Controller’in miras aldığı ControllerBase sınıfı üzerinde yer alan ViewBag ya da ViewData propertylerinde tutulmakta.Böylece Controller üzerinden gelen bilgiler sayfa render edilirken ilgili alanlara aktarılmakta. WebForms ile çalışanların hatırlayacağı üzere bu 2 property ViewState’in MVC tarafındaki işlevselliğini yapıyor denilebilir ama ViewState’den davranışsal temel farkı üretilen sayfa üzerinde herhangi bir ekstra html içerik üretmemesidir.
Peki bu 2 özellik arasında ne gibi bir fark.Neden aynı işlevi yapan 2 farklı özellik var. Bu sorunun basit cevabı:
ViewBag ile ViewData arasından birisini seçmek açısından gerçek anlamda teknik olarak bir avantaj yok.Gerçek anlamda ile kasıt ikisi de aynı işlevi yapmakta ama fark biri yerine diğeri kullanılmasından kaynaklanacak sonuçlar. Temel fark ViewBag’in dinamik bir tip olması. Dinamik tip (dynamic) tip kontrolü işlemine derleme anı (compile time) yerine çalışma anı (runtime) seviyesinde izin verdiğinden bu durumdan kaynaklanan farklılıklar mevcut.
1.Fark
ViewBag, key’e ulaşılmaya çalışıldığında sadece C#’da geçerli olan bir tanımlayıcı olması durumunda çalışır.
1
| ViewData[ "Status Code" ]; |
şeklinde tanımlanan bir status code değerine ViewBag ile ulaşılamaz.Çünkü
1
| ViewBag.Status Code |
hatalı bir tanımlama‘dır.
2.Fark
Dinamik değerler genişletme metodlarına (extension methods) parametre olarak gönderilemezler.Çünkü C# derleyicisi derleme anında her parametrenin gerçek tipini bilmek zorundadır doğru genişletme metodunu çağırabilmek için.
1
| @Html.TextBox( "name" ,ViewBag.Name) |
hatalı bir tanımlama‘dır. Şu şekilde yapılabilir:
1
2
3
4
5
| //Birinci Alternatif ViewData[ "name" ] //İkinci Alternatif ( string ) ViewBag.Name |
Kaynak:
Diğer bir ViewBag Örnek Kullanım;
HomeController’da Index() methoduna gidelim.
public ActionResult Index()
{
ViewBag.Message = “Hoşgeldiniz ASP.NET MVC!”;
var yazilimgelistir = new List<string>
{
“Hasan KAÇAN”,”Ali UÇAN”,”Veli BİLEN”,”Halis GÖREN”,”Kemal ÖRTEN”
};
ViewBag.yazilimgelistir = yazilimgelistir;
return View();
}
{
ViewBag.Message = “Hoşgeldiniz ASP.NET MVC!”;
var yazilimgelistir = new List<string>
{
“Hasan KAÇAN”,”Ali UÇAN”,”Veli BİLEN”,”Halis GÖREN”,”Kemal ÖRTEN”
};
ViewBag.yazilimgelistir = yazilimgelistir;
return View();
}
index.aspx içine razor yapıda kodu yazıyoruz.
<h2>@ViewBag.Message</h2>
<ul>
@foreach (var gelistirici in ViewBag.yazilimgelistir)
{
<li>
@gelistirici
</li>
}
</ul>
<ul>
@foreach (var gelistirici in ViewBag.yazilimgelistir)
{
<li>
@gelistirici
</li>
}
</ul>
Diğer bir ViewData Örnek Kullanım;
HomeController’da Index() methoduna gidelim.
public ActionResult Index()
{
var yazilimgelistir = new List<string>
{
“Hasan KAÇAN”,”Ali UÇAN”,”Veli BİLEN”,”Halis GÖREN”,”Kemal ÖRTEN”
};
ViewData[“yazilimgelistir”] = yazilimgelistir;
{
var yazilimgelistir = new List<string>
{
“Hasan KAÇAN”,”Ali UÇAN”,”Veli BİLEN”,”Halis GÖREN”,”Kemal ÖRTEN”
};
ViewData[“yazilimgelistir”] = yazilimgelistir;
return View();
}
index.aspx içine razor yapıda kodu yazıyoruz.
<ul>
@foreach (var gelistirici in (List<string>)ViewData[“yazilimgelistir”])
@foreach (var gelistirici in (List<string>)ViewData[“yazilimgelistir”])
{
<li>
@gelistirici
</li>
}
</ul>
@gelistirici
</li>
}
</ul>
Hiç yorum yok :
Yorum Gönder