10/28/2005

Birden Fazla Validation Control Kullanilan Sayfalarda Yasanan Problemler



ASP.Net aplikasyonlarınızda 1 den fazla required field validator kullandiğiniz sayfalarda istemediğiniz zamanlarda devreye girdikleri olmuştur.
Validation kontrollerinizin istemediğiniz zamanlarda devreye girmesini önlemenin çeşitli yöntemleri bulunuyor;

1. Yöntem (Sadece bazı durumlarda geçerli)

Validatör kontrolünüzü istenmeyen durumda programın mantık gidişatına göre Asp.Net aplikasyonunuzun codebehind bölümünde validatör kontrolünüzü Enable/Disable ederek istediğiniz zaman aktif, istediğiniz zaman inaktif duruma getirebilirsiniz.

Ör: validasyonKontrolum.Enabled = False

Aspx sayfanızın içinde validatıon'a sebep olan button'u bulup onun attributelarından CausesValidation = False yapabilirsiniz. Bu şekilde o buton artık validation'a sebep olmayacaktir. Eğer o butonun validasyonuna ihtiyacınız var ancak yanlış zamanda fire ediyor ise 2. maddeyi okuyun.

2. Yöntem (Daha komplike durumlar için geçerli - İlk yöntem sorununuzu çözmüyorsa burayı mutlaka okuyun)

Sayfanızda yukarıdaki resimdeki gibi 2 adet textbox ve bunlara ait validatorlarınız ve 2 adet ayrı ayrı işlere yarayan butonunuz bulunsun. (Or: Resimde 1. si Update, 2.si Upload )



Problem:
Bu butonlardan herhangi birine tıkladığınızda requiredfieldvalidatorlarınızdan ikisi birden aktif oluyor .

Çözüm:
Required filed validatorları sadece istediğimiz zaman aktif hale getirmek için opsiyonumuz bu requiredfieldvalidatorların server tarafında çalışmasını sağlamak. Onu da şu şekilde yapacağız;

Öncelikle benim resimdeki örneğime göre hem Update hemde Upload düğmelerim için CausesValidatıon=False yapıyorum. Daha sonra UpdateButtonuna tıkladığımda çağrılacak olan fonksiyona giderek aşsağıdaki satırları ekliyorum.


Private Sub ValidasyonaSebepOlucakButton_Click( hedehodezirtpirt)

ValidatorunuzunIsmi.Validate()
If ValidatorunuzunIsmi.IsValid = True Then
''Butonun yapmasi gereken islemlere devam et
End If
End Sub

Validate() fonksiyonu validation kontrolünüzü aktif hale getiriyor.
IsValid() ise validasyonun sonucunu size True/False seklinde belirtiyor . Bu property'i kullanarak programınızın mantıksal olarak nasıl ilerlemesini istediğinizi belirleyebilirsiniz.

Umarım sorununuzu çözmeye yardımcı olur. Bu arada ASP.Net 2.0 ile gelen "Validation Groups" özelliği bu sorunu kökünden halletmiş olacak.