Asp.Net ClientIDMode özelliği nasıl kullanılır?

Merhaba arkadaşlar bu makalemde asp.net controllerindeki ClientIDMode özelliğinden bahsedeceğim. Asp.Net Kontrolleri browser'da derlenirken verdiğiniz id'ler sizin verdiğinizden biraz farklı olabilir.

Örnek :
<asp:Repeater id="rptData" runat="server">
<ItemTemplate>
<asp:TextBox ID="txtName" runat="server" Text=''></asp:TextBox>
</ItemTemplate>
</asp:Repeater/>

Örnekte verilen Repeater'ın HTML çıktısı aşağıdaki gibidir.

<input type='text' id="rptData_ctl00_txtName" value="Ahmet"/>
<input type='text' id="rptData_ctl01_txtName" value="Mehmet"/>
<input type='text' id="rptData_ctl02_txtName" value="Ömer"/>
<input type='text' id="rptData_ctl03_txtName" value="Ali"/>
<input type='text' id="rptData_ctl04_txtName" value="Hakan"/>

Örnekte Repeater içinde txtName ID'li bir TextBox'ımız var ama veri bağlandıktan sonra her bir satır data için bu ID Uniqe(Farklı) değer aldı. Çünkü sayfada bir ID'den en fazla 1 tane bulabilir. Ama Oluşan ID'ler fazlaca uzun Önce Repeater ID'si, sonra ctl01,ctl02.. ctl(n) index numarası, en sonra TextBox'ın ID'si ile uniqe ID oluşuyor. JavaScript ile bu uzun ID'lerle işlem yapmak yerine, kontrollerin "ClientIDMode" özelliğinden faydalanabiliriz. ClientIDMode: Asp.Net kontrollerinin browser tarafından nasıl oluşturulacağını kontrol eder.

AutoID: Hiç bir şey yapmazsak bu özellik aktiftir.
Inherit: Hemen üzerindeki kontrolde bu özellik ne atanmışsa alt kontrollerde de bu özellik olur.
Predictable: Daha düzenli bir ID yapısı sunar. Üst kontrol adı _ kendi adi _ index numarası şeklinde.
Static: Sunucu ID'si ne verdiyseniz. Client tarafında da O ID geçerlidir. Ama Bunu Repeater, DataList gibi veri bağlanan kontroller içinde yapmayın. Aksi takdirde birden fazla aynı ID'ye sahip kontrol oluşacaktır.

Static Mode Çıktısı:

<input type='text' id="rptData_txtName" value="Ahmet"/>
<input type='text' id="rptData_txtName" value="Mehmet"/>
<input type='text' id="rptData_txtName" value="Ömer"/>
<input type='text' id="rptData_txtName" value="Ali"/>
<input type='text' id="rptData_txtName" value="Hakan"/>

Predictable Mode Çıktısı: Repeater, DataList, GridView gibi kontroller için uygundur.
ID Oluşumu: rptData_KontrolAdi_Index

<asp:Repeater ID="rptData" runat="server" ClientIDMode="Predictable">
<ItemTemplate>
<asp:Label ID="txtName" runat="server" Text=''></asp:Label>
</ItemTemplate>
</asp:Repeater>

<input type='text' id="rptData_txtName_0" value="Ahmet"/>
<input type='text' id="rptData_txtName_1" value="Mehmet"/>
<input type='text' id="rptData_txtName_2" value="Ömer"/>
<input type='text' id="rptData_txtName_3" value="Ali"/>
<input type='text' id="rptData_txtName_4" value="Hakan"/>

Uzun ama en azından kontrol isimleri ve index'ten oluşmuş bir yapı.

İyi Kodlar!