Custom kontrol geliştirirken bu kontrollerin bazı ekstra özelliklerini client tarafında javascript’ler ile kullanmak gerekebiliyor. Kontrolleri başka kontroller ile ilişkilendirmek, kontrollerin standart özelliklerinden başka özellikler ile kontrolleri zenginleştirmek için tercih edilebilecek bir yöntem bu.Peki nasıl yapıyoruz?
public class ServerControl1 : Label
{
public override void RenderControl(HtmlTextWriter writer)
{
writer.AddAttribute(“AnotherControlType”,
“AnotherCustomServerControl1”);
base.RenderControl(writer);
}
}
Yukarıdaki kod parcasında basitce bir örnek var. Sayfamız render olduğu zaman aşağıdaki gibi bir html çıktısına sahip olacaktır.
<span AnotherControlType=”AnotherCustomServerControl1″ id=”ctrl1″>Hello World</span>
Bu sayede kontrolümüze client tarafında kullanılabilecek ek özellikler katmış olduk.Javascript ile aşağıdaki gibi bu kontrolün kendi eklediğimiz özelliğine ulaşabiliriz.
var control = document.getElementById(“ctrl1”);
alert(control.AnotherControlType);
Oldukça fayda sağlayabilecek bir yöntem aslında. Bir çok şeyi kolaylaştırıyor.Ama burada dikkat etmek gereken çok önemli bir nokta var.Bu şekilde bir geliştirme ile XHTML uygunluğunu bozmuş olabiliyoruz.Örnekteki <span> kontrolünün XHTML standartları kapsamında AnotherControlType diye bir özelliği yok. Dolayısıyla standartlara uymamış oluyoruz. Browser desteğinin ön planda olduğu ya da başka bir ifade ile XHTML standartlara uygunluğun önemli olduğu uygulamalarda bu tarz bir uygulama yerine standartlara uymak adına farklı bir yaklaşımda bulunmak gerekiyor.
public override void RenderControl(HtmlTextWriter writer)
{
Page.ClientScript.RegisterExpandoAttribute(this.ClientID,
“AnotherControlType”,
“AnotherCustomServerControl1”);
base.RenderControl(writer);
}
Yukarıdaki gibi RegisterExpandoAttribute methodunu kullanarak, kontrolümeze AnotherControlType şeklinde bir özellik katabiliriz. Yukarıdaki örnekten farklı olarak, sayfamız render olduğu zaman ortaya çıkan HTML aşağıdaki gibi olacaktır.
<span id=”ctrl1″>Hello World</span>
<script type=”text/javascript”>
//<![CDATA[
var ctrl1 = document.all ? document.all[“ctrl1”] : document.getElementById(“ctrl1”);
ctrl1.ControlType = “CustomServerControl1”;
//]]>
</script>
DOM’a javascript ile bu özellik eklenmiş oluyor. Dolayısıyla XHTML standartlarını bozmadan, geliştirmiş olduğumuz kontrole ek bir özellik katabiliyoruz.