Sayfalar

3 Mayıs 2013 Cuma

ASP.NET MVC DERSLERİ ( 5.4 ) HELPER, MODEL VE VIEWDATA

Html helper elemanları, HTML üzerinde tam kontrol sağlayarak, web arayüz yapımında büyük kolaylıklar sağlar. Helper kullanılarak yapılan web arayüzü kodlarının okunurluğu artar. Ayrıca helper elemanları, elde olan veriyi göstermek için sürekli ViewData nesnesini kontrol ederler. (Tüm veriler ViewData içerisindeki ViewBag nesneleri içerisinde tutulur)

Örneğin form içerisinde Haber nesnesinin başlık özelliğinin ayarlanmış olarak gelmesini istiyorsak, controller sınıfı içerisinde aşağıdaki gibi bir tanımlama yapabiliriz.
public ActionResult HaberDuzenle(int id)
{
    ViewBag.Baslik = "Örnek başlık";
    return View();
}

Bu tanımlamadan sonra view sayfası içerisinde bu veriyi textbox içerisinde aşağıdaki gibi çağırabiliriz.
@Html.TextBox("Baslik")

Helper elemanının verdiği HTML çıktısı:
<input id="Baslik" name="Baslik" type="text" value="Örnek başlık" />

Html helper elemanları ViewData nesnesi içerisine bakar ve onun içerisinden isim eşleşmesi ile değerleri alabilir. Yukarıdaki controller sınıfının metodunu aşağıdaki gibi değiştirelim.
public ActionResult HaberDuzenle(int id)
{
    ViewBag.Haber = new Haber { Baslik = "Örnek başlık" };
    return View();
}

View içerisinde helper elemanını aşağıdaki gibi çağırabiliriz.
@Html.TextBox("Haber.Baslik")

Helper elemanının HTML çıktısı:
<input id="Haber_Baslik" name="Haber.Baslik" type="text" value="Örnek başlık" />

Eğer "Haber.Baslik" kelimesinin tümüyle eşleşen bir değer yoksa, ilk olarak noktadan öncesine bakılır, yani Haber kelimesi alınarak, ViewData nesnesi içerisinde aranır ve Haber nesnesi bulunur, daha sonra, ikinci kelime alınarak, yani "Baslik", Haber nesnesi içerisinde bu değişken aranır ve bulunur.

Belirtilmesi gereken bir diğer ayrıntı ise, dikkat ettiyseniz, id değeri için nokta ile ayrılan değerler için alt-çizgi konulmuştur. Bunun sebebi id değerleri için nokta kullanımı geçerli değildir. Bu değiştirme işlemini HtmlHelper.IdAttributeDotReplacement statik fonksitonu yapmaktadır. id için bu değişiklik yapılmazsa, yani id içerisinde nokta olursa, jquery ile yapılan istemci taraflı kodlama (client-side-scripting) işlemleri çalışmayacaktır.

Html helper elemanları strongly-typed ViewData ilede çalışmaktadır. Controller içindeki metodu yine aşağıdaki gibi değiştirelim;
public ActionResult HaberDuzenle(int id)
{
    var haber = new Haber { Baslik = "Örnek başlık" };
    return View(haber);
}

View sayfamız;
@Html.TextBox("Baslik");

Html çıktısı:
<input id="Baslik" name="Baslik" type="text" value="Örnek başlık" />

Html helper elemanları ile model ve viewdata kavramları arasındaki ilişkiyi incelemeye çalıştık. Bu bir başlangıç, sahnenin perde arkasında daha çok şeyler var. Tüm bunları ilerleyen yazılarda, örnekler yaparak, anlamaya çalışacağız.

1 yorum: