Bu gün dersimizde Validation Geçerlik Dentimi Kontrollerine değineceğiz. Önce adı GecerlikDeneme isimli bir yeni site oluşturalım. Burada programın otomatik olarak oluşturacağı Default.aspx dosyasını ve App_Data dizinini silelim. Bunu yapmak için dosya ve dizini ayrı,ayrı sağ tuş ile tıklayıp delete seçeneğini seçelim. Web sitemize yeni bir sayfa eklemek için Website menüzünden Add New Item seçeneğini seçtikten sonra Yeni sayfamızın adını GecDenTest.aspx olarak belirleyip Add düğmesini tıklayalım. Daha önce bu işlemin iki tane dosya oluşturduğunu gördük. GecDenTest.aspx dosyasının source kısmında içeriğini inceleyecek olursanız en başta <%@ Page Language="VB" AutoEventWireup="false" CodeFile="GecDenTest.aspx.vb" Inherits="GecDenTest" %>
yazılı olduğunu göreceksiniz. Bu GecDenTest.aspx dosyasının kodunun GecDenTest.aspx.vb dosyasında bulunacağını ve GecDenTest.aspx.vb dosyasında tanımlanmış olan GecDenTest sınıfının bu sayfa tarafından kullanılacağını belirtmektedir. Partial Class GecDenTest Inherits System.Web.UI.Page End Class GecDenTest sayfasına aşağıdaki gibi kontroller iliştirelim. Bu sayfadaki amacımız, txtdenetlenen metin kutusuna bir sayı girdikten sonra bu sayının geçerli olup olmadığını test eden bir sayfa yapmaktır. Bu amaçla alet panosunda görünen validation kısmından bir RangeValidator kontrolü alıp bunu txtdenetlenen metin kutumuzun yanına koyalım. RangeValidator kontolümüzün ID sini RangeDenet yaptıktan sonra, RangeDenet kontrolünün özelliklerini aşağıdaki gibi oluşturalım.
Şimdi cmdtamam düğmemizin olay kodunu aşağıdaki gibi olşturalım. Protected Sub cmdtamam_click(byval sender As Object, ByVal e As System.EventArgs) Handles cmdtamam.click If Me.IsValid Then lblmesaj.text = "Sayfa denetlendi ve cmdtamam_click olayı çalıştırıldı." Exit Sub End If Sayfamızı denemek için txtdenetlenen kutusuna 1, 10, 21, abc gibi girdiler girerek deneyelim. Şimdi sitemize adı KullanGir.aspx olan aşağıdaki gibi bir sayfa ekleyelim. Burada şifre girilecek olan text kutularının TextMode özelliğini Password yapmak gerekir. Bu sayfada Tamam düğmesine basılınca aşağıdaki koşulları sağlayacak bir takım kontroller yapılmasını istiyoruz
1. Ad alanı boş olmasın 2. Şifre alanı boş olmasın 3. Yeniden girilen şifre bir önceki girilen şifre ile aynı olsun 4. e-mail saçma olmasın 5. Yaş 1-120 arasında olsun. Bunları sağlamak için alet kutusundan sayfamıza aşağıdaki geçerlik denetimi kontrollerini koyalım ve ID lerini belirleyelim. Ayrıca bunların denetleyeceği kontrolleri belitildiği gibi seçelim. Geçerlik denetimi ID ConrolToValidate RequiredFieldValidator vldkullanad txtkullanad RequiredFieldValidator vldsfr txtsfr CompareValidator vldsfryeniden txtsfryeniden RegularExpressionValidator vldemail txtemail RangeValidator vldyas txtyas Bu kontrollere aşağıdaki hata mesajlarını girelim. vldyas kontrolünün özelliklerini daha önce RangeValidator için anlatıldığı gibi, sınırlar 1-120 arasında olacak şekilde değiştirelim.
Şimdi sayfa üzerinde bulunan düğmelerin olaylarını aşağıdaki gibi oluşturalım. Protected Sub cmdtamam_click(byval sender As Object, ByVal e As System.EventArgs) Handles cmdtamam.click If Page.IsValid = False Then Exit Sub lblmesaj.text = "Bu form geçerlidir." Protected Sub cmdvazgec_click(byval sender As Object, ByVal e As System.EventArgs) Handles cmdvazgec.click lblmesaj.text = "Bu form için bir geçelilik denetimi uygulanmadı." Programımızı çalıştıralım ve sayfaya bir takım bilgiler girerek geçerlik denetimi kontrollerimizi deneyelim. Bu denemeden de anlaşılacağı gibi eğer bir alan için, alanın boş olmamasını denetleyen RequiredFieldValidator olmadığı sürece alan denetlenmemektedir. O halde örneğin yaş alanının boş girilmesini istemiyorsanız, bunun için yaş girilen alan için de bir RequiredFieldValidator girmelisiniz. Burada asıl önemli olan alan şifrenin yeniden girildiği alandır. Bu alana mutlaka bir RequiredFieldValidator eklemek gerekir. Aksi halde iki şifrenin birbirini tutup tutmadığı kontrol edilmez. Ayrıca sayfayı deneme aşamasında, sayfa ekranda görülünce kaynağı inceleyiniz. Burada HTML koduna bir de javascript kodu eklendiğini göreceksiniz. Denetimleri sizin için bu kod yapmaktadır. Validator grubunda bulunan ValidationSummary kontrolünü denemek için bu sayfaya bir de bu kontrolden koyarak sayfayı yeniden deneyiniz. Şimdi e-mail alanına ve bu alan için kullanılan RegularExpressionValidator geçerlik denetimine gelelim. Bu aslında başlı başına bir dersin konusu olabilir. Bunun için önce Regular Expression veya Düzenli Deyim kavramını anlamak gerekir. Bir düzenli E deyimi aslında bir takım karakterlerden oluşan bir ifadedir. Bu ifade verien bir S metninin E tipinde bir metin olup
olmadığını test etmekte kullanılır. Buna güzel bir örnek DOS kullanarak yaptığınız aramalarda tüm doyaları listelemek için kullanılan *.* ifadesidir. Burada *.* bir düzenli deyimdir. * ibaresi ile eşleşen metinler kümesi tüm metinler olduğundan bu *.* düzenli deyimi, adı ve uzantısı ne olursa olsun tüm doyalar ile eşleşir. Bir düzenli deyimde kullanılan karakterler literal ve meta olmak üzere ikiye ayrılır. Yukarıda kullanılan * karakteri bir meta karakterdir. Aşağıda yararlı meta karakterler ve anlamları verilmektedir. Karater Açıklama * Önceki karakter veya deyimin 0 veya daha fazla kere tekrarlanması + Önceki karakter veya deyimin bir veya daha fazla kere tekrarlanması () Parantez arasında kalan karakterler tek bir deyim olarak işlenir Veya [ ] Köşeli parantezler içinde olan karakterler veya karakter aralığı [^ ] Köşeli parantezler içinde veya karakter aralığında olmayan karakterler. Newline karakteri hariç herhangi bir karakter \s Boşluk veya tab \S Boşluk veya tab olmayan herhangi bir karakter \d Herhangi bir sayı karakteri \D Sayı olmayan herhangi birkarakter \w Herhangi bir sözcük karakteri. (Harf, sayı veya alt çizgi) Bu karakterlerden herhangi bir c karakteri literal olarak kullanılacaksa o zaman bu karakter \c şeklinde yazılır. Örnekler. İçerik Düzenli deyim Açıklama E-Posta adresi \S+@\S+\.\S{2,4} (bir veya daha fazla boş olmayan karakter)@ (bir veya daha fazla boş olmayan karakter). (2,3 veya 4 tane boş olmayan karakter) Parola \w+ Harf, sayı veya alt çizgi karakterlerinden Belili uzunlukta parola Başka bir parola \w{4,10} [a-za-z}\w*\d+\w* oluşan bir dizi 4 ile 10 arasında değişen sayıda harf, sayı veya alt çizgi karakterlerinden oluşan bir dizi a dan Z ye bir harf ile başlayan, sıfır veya daha fazla sayıda harf, sayı veya alt çizgi, bir veya daha fazla sayı karakteri, sıfır veya daha fazla sayıda harf, sayı veya alt çizgi ile devam eden bir metin
Sınırlı uzunlukta alan TC Kimlik NO \S{4,10} [0-9]{11} Bu iafadeleri deneyen bir sayfayı web sitemize ekleyelim. Bu amaçla web sitemize RegExpDeneme.aspx sayfası ekleyelim. Bu sayfaya aşağıdaki kontrolleri koyalım Burada kullanılacak olan denetim kontrolü RegularExpressionValidator olacaktır. Bu kontrol için ControlToValidate özelliği txtdenetlecekmetin olmalıdır. cmddzdyolustur kontrolünün olayı aşağıdaki gibi yazılmalıdır. Protected Sub cmddzdyolustur_click(byval sender As Object, ByVal e As System.EventArgs) Handles cmddzdyolustur.click vldduzenlideyim.validationexpression = txtduzenlideyim.text lbldeyim.text = "Test için kullanılacak olan düzenli deyim: " & txtduzenlideyim.text Şimdi sayfayı denemeye hazırız.