18 Ağustos 2009 Salı

ASP.NET'te CustomValidator Kontrolü ile Özel Validation Mekanizmaları Oluşturma

Merhabalar,
Bu yazımda ASP.NET ile beraber gelen CustomValidator kontrolü ile özel validation mekanizmaları oluşturma konusuna değineceğim.Aslında ASP.NET ile gelen validation kontrollerinin birçoğu ihtiyacımız olan validation mekanizmalarını sağlamakta.Ancak bazı durumlarda farklı isteklere cevap verecek bir validation mekanizması oluşturma ihtiyacı hissedebiliyoruz.Bu gibi ihtiyaçlarımız için ASP.NET'te CustomValidator kontrolünü kullanabiliriz.
CustomValidator kontrolünü kullanmamız için öncelikle 2 taraflı validation mekanizmasını yazmamız gerekiyor.
  • İstemci taraflı validation : Kullanıcılara daha hızlı yanıt verilebilmesi için kullanılan mekanizma.
  • Server taraflı validation : Veri server tarafına geldiğinde hala daha valid olduğunun doğrulanması.
İstemci Taraflı Validation
İstemci taraflı validation mekanizmasını tabi ki javascript ile oluşturacağız.Validation işini yapacak olan metodun imzası ise şu şekilde olmalı.


function FonksiyonAdi(source,arguments)


Burada fonksiyon adi CustomValidator'a parametre olarak verileceği için değişken olabilir.Ancak parametreler bu şekilde kalmalıdır.

Parametrelerin anlamlarını açıklarsak:

  • source : Validation mekanizmasını sağlayan kontrolü referans eder.
  • arguments : Value parametresi ile validation yapılacak değer alınır.IsValid propertysine ise verinin geçerli olup olmadığı set edilir.
Burada yapacağımız örnek ise şu şekilde olacak : Alınan bir şifrenin uzunluğunun 8 den büyük ve içerisinde en az bir adet nümerik karakter bulunduğunun kontrolü olacak.

Bunun için öncelikle istemci tarafındaki javascript metodunu yazacağız.


<script type="text/javascript">

function ValidateEt(source,arguments)

var input = arguments.Value; //Validate edilecek olan degerin alinmasi

arguments.IsValid=false; //İlk degerin false olarak atanmasi

var isvalid=false;

if (input.length > 8)

isvalid = true; //karakter uzunlugu 8 den buyukse ilk validation gecilir.

if (!isvalid)

return;

isvalid=false;

for (var i=0;i

if (input.charAt(i) >= '0' && input.charAt(i) <= '9') { //En az bir numerik karakter goruldugu anda validation islemi tamamlanir.

isvalid = true;

break;

}

}

if (isvalid) //Data validate edildi.

arguments.IsValid = true;

}

script>


Javascript kodunda gerekli comment satirlarini yazdigim icin açıklama yapmayacağım.

Geriye ise sadece server taraflı validation işlemi kaldı.


Server Taraflı Validation

Server tarafında ise yine yaptığımız kontrolerrin aynısını tekrarlamalıyız.Bu işlemlerin hepsini CustomValidator kontrolünün OnServerValidate eventinde gerçekleştiriyor olacağız.


protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)

{

args.IsValid = false;

string data = args.Value;

if (data.Length <>

return;

foreach (char c in data)

{

if (c >= '0' && c <= '9')

{

args.IsValid = true;

break;

}

}

}


HTML tarafında ise markup şu şekilde olabilir:


<form id="form1" runat="server">

<div>

<asp:TextBox ID="Textbox1" runat="server" TextMode="Password" />

<asp:CustomValidator ID="CustomValidator1" runat="server" ClientValidationFunction="ValidateEt" ControlToValidate="Textbox1" OnServerValidate="CustomValidator1_ServerValidate" Text="Şifre uzunluğu 8'den büyük olmalı ve en az 1 numerik karakter içermeli">asp:CustomValidator>

<input id="Submit1" type="submit" value="submit" />

div>

form>


Uygulamayı çalıştırdığımızda Textbox1 kontrolü focusunu kaybettiği anda javascript kodunun çalıştığını göreceğiz.Ayrıca submit butonu ile server tarafına geçerseniz server taraflı validation kodumuzun da çalıştığını görebiliriz.


Görüşmek Üzere

0 yorum: