Sayfalar

7 Mayıs 2013 Salı

ASP.NET MVC DERSLERİ ( 5.6 ) TEMPLATED HELPERS

Helpers ve Model Metadata

Metadata için, "veri hakkında bilgi" diyebiliriz. Model metadata, model hakkındaki bilgileri içerir. Daha önce, Haberi düzenlemek için view içerisinde Haber modelini kullanırken görmüştük ki, controller içerisinde modelin bir özelliğine değer atadığımızda bunu view içerisinde görebiliyorduk. Bu değer ViewData nesnesi ile aktarılıyordu.

Helper elemanları bununda ötesinde o model hakkında bilgileride tutmaktadır. Ne demek bu? Daha öncede söylemiştik, @Html.Label elemanı KategoriId için Kategori çıktısını vermişti. İşte bu bilgi model metadata bilgisidir. Biz KategoriId için bir dataannotation tanımlamadık, dolayısı ile, değişken ismi olan Kategori yazdırıldı. Eğer modelimizin özelliği aşağıdaki gibi olsaydı;
[DisplayName("Kategori Seçiniz")]
public int KategoriId { get; set; }

Label elemanının HTML çıktısı:
<label for="KategoriId">Kategori Seçiniz</label>

şeklinde olacaktı. DataAnnotation konusu 6. dersler çerçevesinde anlatılacak.

Templated Helpers

Bu helper elemanları metadata ve template kullanarak, HTML çıktıları üretirler. Bu helperlar, @Html.Display ve @Html.Editor elemanlarıdır. Strongly-typed karşılıkları da, FOR son eki almış halidir. Model için tanımlanmış olanlar ise, @Html.DisplayForModel ve @EditorForModel elemanlarıdır. Bu elemanlar, özel tanılanmış ve ya var olan tanımlı şablonları kullanarak gerekli olan HTML çıktılarını üretirler. Örnek üzerinde açıklayalım; @Html.TextBoxFor elemanının HTML çıktısı:
<input id="Baslik" name="Baslik" type="text"
value="Deneme başlık" />

Eğer @TextBoxFor yerine @Html.EditorFor kullanmış olsak, çıktı yine aynı olacaktır. Peki helper elemanı nereden biliyor textbox olacağını. Evet model metadata dan biliyor. Model metadata, modelin içerisindeki değişkenin değerini, tipini, vb gibi şeyleri biliyor. Bizim modelimizde de Baslik özelliği string olararak tanımlı, string değerin varsayılan HTML çıktısı da textbox olarak tanımlıdır. Dolayısıyla hiç bir ayar yapmasak bile textbox oluşturulacaktır.

Templated helpera HTML çıktısı üretirken ne üretmesi gerektiğini söyleyebiliriz. Örneğin, eğer modelimizde aşağıdaki gibi bir değişiklik yaparsak;
[Required(ErrorMessage = "{0} alanı zorunludur.")]
[StringLength(160)]
[DataType(DataType.MultilineText)]  // bu satıra dikkat
public string Baslik { get; set; }

Yukarıdaki kod da Baslik alanı için MultilineText diye bir veri tipi ayarladık. Şimdi EditorFor elemanı başlık için HTML oluştururken metadatadan bu bilgiyi alacak ve HTML çıktısı aşağıdaki gibi olacaktır:
<textarea class="text-box multi-line" id="Baslik" name="Baslik">
    Deneme başlık
</textarea>

 EditorForModel ise modelin tüm elemanlarına böyle ihtiyacı olan HTML elemanını çıktı olarak verir. Böylece view sayfalarında hiç bir değişiklik yapmadan, sadece modelin elemanlarına hazırladığımız şablonlar ile view sayfasının görüntüsünü değiştirmiş oluruz.

Her bir veri tipi için farklı bir şablon yazabiliriz (ileriki derslerde kendi şablonlarımızı nasıl yazacağımızı göreceğiz).

1 yorum:

  1. Kardeşim gittikçe ağırlaşan terimsel bir dil kullanıyorsun, anlayamaz hale geldim rica etsem daha hafif bir dil kullanabilir misin?

    YanıtlaSil