ASP.NET MVC 3 Razor ile Uygulama Geliştirme Yazı Dizisi 13 – View ile İlgili Bazı Kavramlar (ViewData, ViewBag, TempData)


asp-net-MVC3

Merhaba MVC Severler,

Başlığını yaklaşık 2 ay önce attığım fakat henüz vakit gelmediği için seriye hemen hemen her gün yazılarım ile devam edeceğim. Bu seri bittikten sonra ASP.NET MVC 4 (Beta) ile devam etmeyi planlıyorum.

Hazırlık

Uygulamamızı Visual Studio 2010 Ultimate sürümünde ASP.NET MVC 3 Empty Template üzerinde yapacağız.

Açıklama

Bildiğimiz gibi View’ler, kullanıcıya kullanıcı arabirimini (UI) temin etmekten sorumlu. View, Controller’in Model ile haberleşip veri alışverişi yapmasından sonra kullanıcıya bu bilgileri sunarken aracı görev yapmaktadır. ASP.NET MVC’de Controller ile HTML arasında veri geçişlerini yapmaktan ViewDataDictionary sorumludur.

ViewData, Controller’da içerisinde data koymanız View içerisind erişebilirsiniz. Key/Value ilişkisine göre çalışır ve object almaktadır.  ViewData, ViewDataDictionary class’ından türemiştir ve aynı şekilde bu class’ta key/value ilişkisine göre çalışmaktadır. Ayrıca içerisine atayacağız herhangi bir list, tablo ya View içerisinde erişip verilerinizi kullanabilirsiniz. Daha genel bir örnekle, bir selectedList türünü atacağınız ViewData’ya vereceğiz Key, doğrudan View içerisinde bir SelectList’e vereceğiz isimle aynı olması durumunda, doğrudan datasource gibi işlem görecektir. Bu sayede Controller içerisinde atadığınız verileri herhangi bir işlem yapmadan SelectList içerisinde görebilirsiniz.

Örnek Tanımlama: ViewData[“deger”] = 5;

ViewBag, ViewData’nin C# 4.0 ile gelen yeniliklerden olan Dynamic ile daha etkili kullanılabilen halidir.

Örnek Tanımlama: ViewBag.deger = 5;

Not: ViewData veya ViewBag ile tanımlanan özelliklere diğeri ile aynı isimle erişilebilir- bazı özel durumlar hariç.

ViewBag ile ViewData arasındaki bazı kritik farklılıklar vardır:

ViewData[“ad soyad”] gibi boşluklu tanımlama yapılabilirken, ViewBag’te bu şekilde bir kullanım söz konusu değildir. Bu şekilde tanımlanan ViewData’ya ViewBag içerisinde erişelemez.

Diğer bir önemli nokta ise, dynamic değerlerin extension metotlara parametre olarak atanamayacağıdır. C# compiler, compile zamanında doğru extension metotu seçmek için her bir parametrenin gerçek tipini bilmek zorundadır. Aşağıdaki örnek her zaman hata verecektir:

@Html.TextBox(“ad”,ViewBag.Ad)

Bunu çalıştmaknın iki yolu vardır;

  1. ViewBag.Ad yerine ViewData[“Ad”] yazılır
  2. (string)ViewBag.Ad

TempData, aslında türkçe olarak anlamına bakarsak, geçici veri demektir. Basit anlamdan, birden fazla request’te ihtiyac duyulacak datayı içerisinde barındıran kovadır. Herhangi bir şeyi TempData içerisinde koyulabilir. TempData içerisine yerleştirilen bu verilere, bir sonraki request tamamlanınca atılır(discarded). Farklı bir pencerede veya tab açıldığında request oluşma ihtimali vardır. Bu yüzden kullanmak konusunda ısrarcı olursanız, Session sizin ihtiyacınızı karşılayacaktır. Default olarak TempData, Session içerisinde depolanmaktadır.

Sonraki yazılarımda sıkça kullacağız ve örneklerinide ekleyeceğim.

İyi çalışmalar

MVC ile kalın.

, , , ,

  1. ASP.NET MVC 3 Razor ile Uygulama Geliştirme Yazı Dizisi 14 – Razor Nedir? Web Form ile Kullanım Farklılıkları Neler? Implicit Code Expression, Explicit Code Expression « Mahmut Can Sözeri
  2. [Blog Post(Turkish)] ASP.NET MVC İle İlgili Tüm Yazılarım (29 Yazı, 1 Yazı Dizisi ve 1 İpucu Serisi) « Mahmut Can Sozeri

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s