Validation Kontrolleri
Kompleks web sitelerinin birçoğunda üyelik sistemi veya forum gibi server-client
arasında iletişim kurulmasını gerektiren uygulamalar vardır. ASP ve PHP gibi
server taraflı platformların kullanımının yaygınlık kazanmasından sonra birçok
web sitesi üyelik sistemi kullanmaya başlamış, sadece üyelerin ulaşabildiği
forum gibi uygulamaları sunmuştur. Kaynak sitelerin artmasıyla birlikte, birkaç
yıl önce örnekleri sadece alışveriş siteleri gibi büyük projelerde görülebilen
üyelik başvurusu formları, bir nevi özelleşmiş ve herkesin kullanmaya başladığı
bir uygulama olmuştur.
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.
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.
taşımadığını kontrol eder.
belirlediği regular expression ile karşılaştırıp kontrol eder.
değerini veya input kontrolünün değeri ile yine programcının belirlediği bir
değeri karşılaştırır.
olup olmadığını kontrol eder.
geliştirmenizi sağlar.
verir.
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.
değerde uygunsuz bir durum olduğunda hata mesajı olarak gösterilir. Ayrıca
ValidationSummary''de de bu mesaj gösterilir.
kadar gizli beklerler. Kullanıcı veriyi girerken istenmeyen bir format
kullanmışsa hata mesajı gösterilir. Display özelliğinin üç muhtemel değeri
vardır.
alan başlangıçta ayrılır.
ayrılmaz ve gerektiğinde sayfanın diğer içeriği ile yer değiştirilerek
gösterilir.
mesajı gösterilmez. Mesaj özette gösterilir.
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 | |
class=HTML_Element><
class=HTML_ElementName>asp:RequiredFieldValidator
class=HTML_AtributList> id="rfvParola" runat="server" ControlToValidate="txtParola" ErrorMessage="Parolayı girmelisiniz" Display= class=HTML_AtributListValues>"Static"/> | |
RequiredFieldValidator
kontrolüne denetleyeceği kontrolün id ''si ControlToValidate özelliği ile
gösterilir.
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 | |
class=HTML_Element><
class=HTML_ElementName>asp:RegularExpressionValidator
class=HTML_AtributList> id="revParola" runat="server" Display= class=HTML_AtributListValues>"Static" ControlToValidate= class=HTML_AtributListValues>"txtParola" ErrorMessage= class=HTML_AtributListValues>"Parola 4-8 karakter olmalıdır" ValidationExpression= class=HTML_AtributListValues>"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.
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 | |
class=HTML_Element><
class=HTML_ElementName>asp:CompareValidator id="cvParola" runat= class=HTML_AtributListValues>"server" ControlToValidate= class=HTML_AtributListValues>"txtParola1" ControlToCompare= class=HTML_AtributListValues>"txtParola2" ErrorMessage= class=HTML_AtributListValues>"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 | |
class=HTML_Element><
class=HTML_ElementName>asp:CompareValidator id="cvParola" runat= class=HTML_AtributListValues>"server" ControlToValidate= class=HTML_AtributListValues>"txtParola" ValueToCompare= class=HTML_AtributListValues>"parola" ErrorMessage= class=HTML_AtributListValues>"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 | |
class=HTML_Element><
class=HTML_ElementName>asp:CompareValidator id="cvParola" runat= class=HTML_AtributListValues>"server" ControlToValidate= class=HTML_AtributListValues>"txtParola" ErrorMessage= class=HTML_AtributListValues>"Sayısal bir değer girmelisiniz" Operator="DataTypeCheck" Type= class=HTML_AtributListValues>"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 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 | |
class=HTML_Element><
class=HTML_ElementName>asp:RangeValidator id="rvNumara" runat= class=HTML_AtributListValues>"server" ControlToValidate= class=HTML_AtributListValues>"txtNumara" ErrorMessage= class=HTML_AtributListValues>"Küçük veya büyük oldu" MinimumValue="2" MaximumValue= class=HTML_AtributListValues>"8"/> | |
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 | |
class=HTML_Element><script
class=HTML_AtributList> runat="server" language="vb"> class=HTML_CodeInServerSideBlock> Sub ParolayıKontrolEt(Sender As class=cs_k>Object, E As ServerValidateEventArgs) class=cs_k>if E.Value = "parola" or E.Value = "sifre" then E.IsValid = True class=cs_k>else E.IsValid = False end class=cs_k>if End Sub </ class=HTML_ElementName>script class=HTML_AtributList>> < class=HTML_ElementName>form runat= class=HTML_AtributListValues>"server"> class=HTML_Element><asp:TextBox class=HTML_AtributList> id="txtParola" runat= class=HTML_AtributListValues>"server"/> class=HTML_Element>< class=HTML_ElementName>asp:CustomValidator id="cvParola" runat= class=HTML_AtributListValues>"server" ControlToValidate= class=HTML_AtributListValues>"txtParola" ErrorMessage= class=HTML_AtributListValues>"hata" OnServerValidate= class=HTML_AtributListValues>"ParolayıKontrolEt"/> class=HTML_Element><br class=HTML_AtributList>> < class=HTML_ElementName>asp:Button id= class=HTML_AtributListValues>"btnOk" runat= class=HTML_AtributListValues>"server" text= class=HTML_AtributListValues>"Giris"/> class=HTML_Element></form class=HTML_AtributList>> | |
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.
src="/cgi-bin/files/2002082_ornek6.gif" width=509>
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.
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.