Validation Kontrolleri
ASP.NET Server kontrollerinin en önemli ve en yeni parçalarından birisi olan server taraflı Validation (Geçerlilik) kontrolleri hakkında özetleyici bir makale
04.08.2002
Bedava ASP veya PHP hosting hizmeti veren web sitelerinin de artışıyla birlikte her sitenin forumu ve böylece bir üye topluluğu olmuştur. Birçok web programcısı değişik tarzlarda üyelik başvurusu formları hazırlamıştır. Çoğu kez ziyaretçinin girdiği değerleri kontrol edip uygunsuz üyelik başvurularının önüne geçmek büyük bir sorun oluşturmuştur.
Bazıları işin kolayına gidip kullanıcısına pek yardımcı olmayan formlar hazırlamayı tercih etmişlerdir. User-friendly olmayan bu formlar beyaz ve boş bir sayfada "Kullanıcı adınız 4 karakterden uzun olmalıdır" demekle yetinmişlerdir. Özellikle bedava SMTP mail hizmeti veren, bu işe gerçekten para yatırıp zaman harcayan Yahoo veya Hotmail benzeri sitelerin başvuru formları web programcılarının hayallerini süslemiş ve hedefleri olmuştur.
Kullanıcısını anlamayan ve çıkan hataları tokat gibi yüzüne çarpan formlar yerine daha arkadaşçıl formlar tercih edilmeye başlamıştır. Ancak Yahoo veya Hotmail ''in sahip olduğu üye başvuru formunu yapmak da pek kolay değildir.
Birçok kişi bu uğurda uzun zaman harcamıştır. Çoğu ASP veya PHP ''nin yetersizliğine bu sırada kanaat getirmiş, eskinin el üstünde tutulan teknolojilerinin artık eskidiğini düşünmüşlerdir. Klasik ASP ile, hiçbir alanı doldurulmadan gönderilen bir formu tekrar göstermek ve doldurulması gereken input kutularının yanına kırmızı bir font ile hata yazısı yazmak kolay iş değildir.
Bazı web programcıları ise daha ileri gidip bu kontrollerin sayfa tekrar yüklenmeden yapılmasını istemiştir. Bunu istemek her ne kadar çok kolay olsa da her şey o kadar kolay değildir. JavaScript ile birşeyler yapılabilir belki ama bu uğurda günler harcanmıştır.
Validation
Kontrolleri
ASP.NET Server kontrollerinden birisi de Validation (Geçerlilik) kontrolleridir. Server taraflı validation kontrolleri onaylanması istenen veriyi kontrol edip gerekirse hata mesajı gösterir. Server bu kontrollere gizli (invisible) kontroller olarak davranır. Kullanıcı istenmeyen bir veri girişi yaptığında kontrol görünür (visible) olur.
6 çeşit validation kontrolü ASP.NET ile web programcısının kullanımına sunulmuştur.
Validation kontrolleri görevlerini server tarafında olduğu gibi client (istemci) tarafında da gerçekleştirirler. RequiredFieldValidator dışındaki kontroller boş input kontrolünde uygunsuz bir durum bulamazlar. Bir input kontrolü için birden fazla validation kontrolü kullanılabilir. Validation kontrollerinin en yaygın kullanılacak olan birkaç özelliği şunlardır.
RequiredFieldValidator
RequiredFieldValidator adından da anlaşılabileceği gibi girilmesi zorunlu tutulan input kontrollerini denetlemek için kullanılır. Kontrolün bu görevi yerine getirebilmesi için denetleyeceği kontrolün id ''sini bilmesi yeterlidir. Boş bir input kontrolü RequiredFieldValidator gözünde hatalıdır. Kullanımı şu şekilde yapılır:
| RequiredFieldValidator | |
|
<asp:RequiredFieldValidator id="rfvParola"
runat="server" ControlToValidate="txtParola" ErrorMessage="Parolayı girmelisiniz" Display="Static"/> | |
RequiredFieldValidator kontrolüne denetleyeceği kontrolün id ''si ControlToValidate özelliği ile gösterilir.
RegularExpressionValidator
VBScript ''in son sürümüyle birlikte klasik ASP programcılarının da kullanmaya başladığı RegularExpression bu kontrolün ana bileşenini oluşturur. ControlToValidate özelliğinde id ''si verilen input kontrolünün değeri ValidationExpression özelliğinde verilen regular expression ifadesi ile karşılaştırılır. RegularExpressionValidator gerekli ifade oluşturulursa diğer bazı validation kontrollerinin görevini yapabilir. Örneğin bir kontrolün değerinin olup olmadığını kontrol edebilir.
| RegularExpressionValidator | |
|
<asp:RegularExpressionValidator id="revParola"
runat="server" Display="Static" ControlToValidate="txtParola" ErrorMessage="Parola 4-8 karakter olmalıdır" ValidationExpression="S{4,8}"/> | |
Bu RegularExpressionValidator kontrolündeki regular expression ifadesine göre txtParola kontrolünün değeri en az 4, en fazla 8 karakter olabilir. Aksi durumlarda hata mesajı gösterilir.
CompareValidator
Bu kontrol değişik şekillerde kullanılabilir. Bir kontrolün değeri ile başka bir kontrolün değerini karşılaştırabileceğiniz gibi bir kontrolün değeri ile spesifik (belirli) bir değeri de karşılaştırabilirsiniz. Ayrıca kontrolün değerinin belirli bir veri tipinde olup olmadığını da denetleyebilirsiniz.
İki kontrolün değerini karşılaştırmak için ControlToValidate ile birlikte ControlToCompare özelliği de kullanılır. İki değer aynı değilse hata mesajı gösterilir.
| İki kontrolün değerini karşılaştırma | |
|
<asp:CompareValidator
id="cvParola" runat="server" ControlToValidate="txtParola1" ControlToCompare="txtParola2" ErrorMessage="Parolalar aynı olmalıdır"/> | |
Bir kontrol ile özel bir değeri karşılaştırmak içinse ValueToCompare özelliği kullanılır.
| Kontrolün değeri ile özel bir değeri karşılaştırma | |
|
<asp:CompareValidator
id="cvParola" runat="server" ControlToValidate="txtParola" ValueToCompare="parola" ErrorMessage="Parolayı yanlış girdiniz"/> | |
Gördüğünüz gibi txtParola kontrolünün değeri ile ValueToCompare özelliğinin değerini bu kontrol ile karşılaştırabiliyoruz. Ben size örnek vermek için parola denetlemesi yapan bir CompareValidator kullandım ama programcının belirleyeceği parola kaynak kodda görüneceği için pek güvenilir bir yöntem olmaz. Nasıl kullanacağınız size bağlı..
| Kontrolün değerinin veri türünü denetleme | |
|
<asp:CompareValidator
id="cvParola" runat="server" ControlToValidate="txtParola" ErrorMessage="Sayısal bir değer girmelisiniz" Operator="DataTypeCheck" Type="Integer"/> | |
Bu CompareValidator kontrolü txtParola kontrolünün değerinin "Integer" türünde olmasını ister. CompareValidator bu denetlemeyi txtParola ''nın değerini Type özelliğinde belirtilen veri türüne dönüştürmeyi deneyerek yapar. txtParola ''ya girilen değer "Integer" ''e dönüştürülemiyorsa "InValid" (uygunsuz) bir durum söz konusu olduğuna karar verilir ve hata gösterilir. Ayrıca Operator özelliğine DataTypeCheck değeri verilerek veri türü kontrolü yapılmak istendiği belirtilir.
RangeValidator
RangeValidator ile denetlenen kontrolün değerinin belli bir aralıkta olup olmadığı kontrol edilir. MinimumValue ve MaximumValue özellikleri ile değerin hangi sayı aralığında olabileceği belirtilir.
| RangeValidator | |
|
<asp:RangeValidator
id="rvNumara" runat="server" ControlToValidate="txtNumara" ErrorMessage="Küçük veya büyük oldu" MinimumValue="2" MaximumValue="8"/> | |
CustomValidator
ASP.NET ''in web programcısına sunduğu validation kontrolleri yetersiz kaldığında CustomValidator imdata koşar. CustomValidator ''ın görevi programcı tarafında yazılan bir sub routine (alt program) ile verilir. Denetlemenin sonucu da sub routine içerisinde belirtilir.
| CustomValidator | |
|
<script runat="server"
language="vb"> Sub ParolayıKontrolEt(Sender As Object, E As ServerValidateEventArgs) if E.Value = "parola" or E.Value = "sifre" then E.IsValid = True else E.IsValid = False end if End Sub </script> <form runat="server"> <asp:TextBox id="txtParola" runat="server"/> <asp:CustomValidator id="cvParola" runat="server" ControlToValidate="txtParola" ErrorMessage="hata" OnServerValidate="ParolayıKontrolEt"/><br> <asp:Button id="btnOk" runat="server" text="Giris"/> </form> | |
CustomValidator kontrolüne ControlToValidate özelliğinde denetlenecek input kontrolünün id ''si verilir. OnServerValidate özelliğine ise denetlemeyi yapacak sub routine ''in ismi yazılır. Bu sub iki parametre alır ve ikinci parametre ServerValidateEventArgs sınıfının bir örneğidir. Bu nesne ile denetlemeyi yapan validator kontrolünün özelliklerine ve yöntemlerine ulaşılabilir. If kontrolüyle birlikte validator kontrolü "valid" veya "invalid" yapılır.
Her ne kadar CustomValidator kontrolü işini server tarafında yapacak olsa da, ASP.NET otomatik olarak denetleme işini yapacak JavaScript kodunu yazar. Bu kodların görünmesini engelleyecek ve böylece güvenliği bir kademe artırabilecek seçenekler detaya girdiği için daha ileride yer vereceğim.
Validation kontrolleri

Sonuç
Validation (Geçerlilik) kontrolleri web programcılarının veriyi kontrol etmesini kolaylaştırıyor. Her türlü veri giriş formunun doldurulmasında ziyaretçinin bilerek/bilmeyerek yanlış formatta bilgi girmesi bu yolla engellenebiliyor. Klasik ASP ''de bu iş için uzun süre harcanıp karmaşık kodlar yazılırken ASP.NET ile birlikte bu işkence ortadan kalkıyor.
Formdaki herhangi bir validation kontrolü, denetlediği
input kontrolünün değerinin geçerli olmadığını düşünürse, formun gönderilmesini
sağlayan buton pasifleşir. Tıklanabilir ama görevini yapamaz. Tüm alanlar
geçerli olduğunda buton yeniden aktif olur.
RequiredFieldValidator, RegularExpressionValidator, RangeValidator, CompareValidator ve CustomValidator bu makalemizin konusunu oluşturdu. Server taraflı CustomValidator örneği kullanarak basit bir örnek yaptım. Client (istemci) taraflı CustomValidator örneğini ise başka bir yazıda vereceğim. Ayrıca diğer bir validation kontrolü olan ValidationSummary hakkında da başka bir yazıda bahsedeceğim.
