7.Ders: ASP.NET’te Form Doğrulama Bileşenleri (Form Validation)
Bu derste ASP.NET ile form doğrulama konusuna değiniyoruz. Form doğrulama; kullanıcının herhangi bir form elemanına bizim istediğimiz biçimde veri girmesini sağlamak için kullanılır. Örnek vermek gerekirse; kullanıcının doğum tarihi alanına geçersiz bir tarih yazmasını, gerekli bir alanı boş geçmesini, sayı yazacağı yerde metin yazmasını engellemek için bu kontrolleri kullanırız.
Form Doğrulama Kontrolleri (Validation Controls)
ASP.NET’te 6 adet form doğrulama kontrolü mevcuttur. Bunlar;
- RequiredFieldValidator
- RangeValidator
- CompareValidator
- RegularExpressionValidator
- CustomValidator
- ValidationSummary
Biz de bu derste bu kontrollerin nasıl kullanıldıklarını öğreneceğiz.
1. RequiredFieldValidator (Gerekli Alan Doğrulayıcısı)
Bu kontrol ile formumuzda bulunan herhangi bir alanın kullanıcı tarafından boş geçilmemesini sağlarız. Bu kontrolün kullanımı şu şekildedir:
<asp:RequiredFieldValidator ID="reqIsim" ControlToValidate="txtIsim" Text="Gerekli" runat="server"/>
Buradaki ControlToValidate parametresi hangi elemanın kontrol edileceğini (burada txtIsim adındaki metin kutusunu kastediyor) belirtiyor. Text parametresi ise doğrulama gerçekleşmediğinde, yani eleman boş bırakıldığında gösterilecek hata mesajını ifade ediyor.
2. RangeValidator (Aralık Doğrulayıcısı)
Bu kontrol ile kullanıcının belirli aralıklardaki değerleri girmesini sağlayabiliriz. Kullanımı şu şekildedir:
<asp:RangeValidator ID="rvSozlu" ControlToValidate="txtSozlu" Type="Integer" MinimumValue="0" MaximumValue="100" Text="Geçersiz sayı" runat="server" />
Daha önce bahsedildiği gibi ControlToValidate parametresi hangi elemanın kontrol edileceğini belirtiyor. Type parametresi ne tür bir veri tipi kullanılacağını belirtiyor. Burada Integer yazarak sayısal bir kontrol yapacağımızı belirttik. Onun yerine String yazarak karakter karşılaştırması da yapabilirdik. MinimumValue ve MaximumValue parametreleri alt ve üst sınırı belirliyor. Text ise yine doğrulama olmazsa, yani 0 ile 100 arasında bir sayı girilmezse gösterilecek hata mesajını belirtiyor.
Önemli Not: Eğer kontrol edilen alan boş geçilirse, herhangi bir doğrulama hatası meydana gelmez. Aynı durum diğer doğrulama kontrolleri için de geçerlidir. Bunu engellemek için RequiredFieldValidatorkontrolünü, RangeValidator ile beraber kullanmalıyız.
3. CompareValidator (Karşılaştırma Doğrulayıcısı)
Bu kontrol ile birkaç doğrulama işlemi yapabiliriz. Örneğin formda bulunan bir kontrolü belirli bir değerle kıyaslayabiliriz, iki farklı form elemanını karşılaştırabiliriz veya bir form elemanına belirli bir veri tipinde (tarih veya sayı gibi) değer girilmesini sağlayabiliriz. Örnek kullanımı şu şekildedir:
<asp:CompareValidator ID="cvTarih" ControlToValidate="txtTarih" Operator="DataTypeCheck" Type="Date" Text="Geçersiz tarih" runat="server" />
Bildiğimiz diğer parametrelerin dışında; Operator parametresi ne tür bir karşılaştırma yapacağımızı belirtiyor. Type ile de veritipini belirtiyoruz. Buradaki örnekte kullanıcının txtTarih alanına geçerli bir tarih girmesi istenmiş. Eğer bu alana 32/22/1988 gibi veya harflerden oluşan geçersiz bir tarih girilirse, hata mesajı görüntülenecektir.
4. RegularExpressionValidator (Düzenli İfade Doğrulayıcısı)
Bu kontrol ile bir form elemanına girilen bilginin düzenli bir formatta girilip girilmediğini kontrol edebiliriz. Örneğin mail adresi, TC kimlik numarası, telefon numarası gibi belirli bir formatta veri girilmesi gereken form elemanlarında bu kontrolü kullanırız. Aşağıdaki örnekte kullanıcının metin kutusuna geçerli bir mail adresi girmesi gerekiyor.
<asp:RegularExpressionValidator ID="revEposta" ControlToValidate="txtEposta" ValidationExpression="^\S+@\S+\.\S+$" Text="Email geçersiz." runat="server" />
Yukarıdaki kontrol nesnesi txtEposta metin kutusuna geçerli bir mail adresi girilip girilmediğini kontrol ediyor. Bunu da ValidationExpression parametresine yazılan ifade ile sağlıyor. Buradaki ifade karmaşık gelse de biraz incelendiğinde anlamlı olduğu görülecektir. Bu alana değişik ifadeler yazılarak metin kutusuna değişik formattaki verilerin girilmesi sağlanabilir. Bu ifadelerden bazılarını Visual Web Developer veya Visual Studio’da RegularExpressionValidator kontrolünün özelliklerinde bulabilirsiniz. Regular Expressions konusuyla ilgilli detaylı bilgiyi ise http://www.regexlib.com/ adresinden alabilirsiniz.
5. CustomValidator (Özel Doğrulayıcı)
Eğer yukarıdaki doğrulama kontrollerinden hiçbiri sizin isteğinizi karşılamıyorsa, CustomValidator kontrolü imdadınıza yetişebilir. Şöyle ki bu kontrol ile kendi doğrulama kodlarınızı yazabilirsiniz. Aşağıdaki örnek kullanımına bakalım:
<asp:CustomValidator ID="csvYorum" ControlToValidate="txtYorum" Text="Yorumunuz çok uzun." runat="server" />
Burada CustomValidator kontrolünün ServerValidate olayına istediğiniz kodları yazarak, doğrulama fonksiyonunu oluşturabilirsiniz. Bu olay Visual Studio’da kontrole çift tıklayarak oluşturulabilir. Bizim örneğimize göre söz edilen olaya şu kodlar yazılmalıdır:
Protected Sub csvYorum_ServerValidate1(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles csvYorum.ServerValidate If args.Value.Length args.IsValid = True Else args.IsValid = False End If End Sub
6. ValidationSummary (Doğrulama Özeti)
Son olarak göreceğimiz ValidationSummary kontrolü ile formda bulunan elemanlara eklediğimiz doğrulama kontrollerine göre, doğrulanmayan alanlara ait hata mesajlarını listeleyebiliriz. Yukarıdaki örneklerde diğer kontrollerde hata mesajları için Text parametresini kullandık. Fakat ValidationSummary kontrolünü kullanabilmek için bu diğer kontrollerin ErrorMessage parametrelerini kullanmamız gerekir. Esasında Text ile kısa bir mesaj verip ErrorMesage ile de hatanın biraz daha detaylı hali verilir. ValidationSummary kontrolünün bazı önemli özellikleri şunlardır:
- DisplayMode: Hata mesajlarının nasıl gösterileceğini belirtir. Alabileceği değerler: BulletList, List, SingleParagraph.
- HeaderText: Mesajlar için bir başlık oluşturmamızı sağlar.
- ShowMessageBox: Hataları mesaj kutusunda görüntüler.
Kodları kısa tutmak maksadıyla, diyelim ki formumuzda birisi ad, birisi de soyad için iki tane metin kutusu olsun. Her iki metin kutusu için de birer adet RequiredFieldValidator kontrolü eklemiş olalım. Bu durumda oluşabilecek hataları ValidationSummary kontrolünde göstermek için aşağıdaki kodları yazmalıyız:
<asp:ValidationSummary ID="vs1" HeaderText="Bazı hatalar oluştu" DisplayMode="List" runat="server" />
Validation Controls ile ilgili bazı önemli bilgiler:
- Bir form elemanı ile birden fazla doğrulama kontolü ilişkilendirilebilir. Örneğin txtFiyat adındaki metin kutusu ile aynı anda hem RequiredFieldValidator hem de CompareValidator kontrolleri ilişkilendirilebilir. Yani hem bu alanın boş geçilmemesini, hem de bu alana bir sayı girilmesini isteyebiliriz. Bu durumda doğrulama kontrollerinin Display özelliklerini Dynamic yapmak sonuçların daha güzel görünmesini sağlayacaktır.
- Page.IsValid özelliği ile sayfadaki form elemanlarının doğrulanıp doğrulanmadığını kontrol edebiliriz. Eğer doğru ise True değeri döndürülür.
- Bu işlemler Javascript destekli olarak yürütülürler. Fakat browser’da JS kapalı bile olsa server tarafında aynı işlemler yapılır. Dolayısıyla JS açık veya kapalı olması farketmez.
- Eğer sayfada birden fazla form varsa doğrulama kontollerinin ValidationGroups parametrelerine aynı değerlerin atanması gerekir. Mesela birinci forma Login, ikinciye Arama gibi.
Konuyla ilgili takıldığınız yerleri aşağıdaki yorum formunu kullanarak iletebilirsiniz.