Makale Özeti

Geçerlilik denetimi (Validator) kontrolleri ASP sayfalarında kullanıcıların kendilerinden istenen bilgileri doğru, eksiksiz ve/veya belirli bir formata göre girmelerini sağlayan araçlardır.

Makale

Asp.Net’te Validator Kontrolleri

 

Geçerlilik denetimi (Validator) kontrolleri ASP sayfalarında kullanıcıların kendilerinden istenen bilgileri doğru, eksiksiz ve/veya belirli bir formata göre girmelerini sağlayan  araçlardır. Web.UI.WebControls ad uzayında bulunurlar ve BaseValidator sınıfından miras alırlar. Her geçerlilik denetimi kontrolü sadece bir kontrole atanıp o kontrolü denetleyebilir ancak bir kontrole birden fazla geçerlilik denetimi kontrolü atanabilir.

 

ASP.Net’te 5 adet geçerlilik denetimi kontrolü vardır. Bunlar:

·                              Required Field Validator: Web formunda kullanıcı adı, şifre gibi kullanıcı tarafından mutlaka doldurulması gereken alanların boş bırakılmamasını sağlayan kontrol.

·                              Range Validator: Kontrole girilen bir değerin önceden belirlenmiş bir aralıkta olup olmadığını denetlemek için kullanılan kontrol.

·                              Regular Expression Validator: Kontrole girilen bir değerin önceden belirlenmiş bir formatta olup olmadığını denetlemek için kullanılan kontrol.

·                              Compare Validator: İki adet kontrole girilen değerlerin belirli bir kritere göre karşılaştırılmasını veya bir kontroldeki değerin daha önceden belirlenmiş bir değerle karşılaştırılmasını sağlayan kontrol.

·                              Custom Validator: Kullanıcı tanımlı fonksiyona sahip, diğer 4 geçerlilik denetimi kontrolünün denetleme alanı dışında kalan denetlemeleri yapmaya yarayan kontrol.

 

Son olarak yukarıdaki 5 geçerlilik denetimi kontrolünün verdikleri hata mesajlarının özet olarak ekranda görülmesini sağlayan Validation Summary adlı bir kontrol de mevcuttur.

        Bütün geçerlilik denetimi kontrollerinde ortak olan bir dizi özellik ve metod vardır. Bunlar:

·                              ControlToValidate: Geçerlilik denetimi kontrolünün uygulandığı kontrolü tanımlar.

·                              ErrorMessage: Geçersiz bir veri girişinde (eğer Text özelliği boş bırakılmışsa) ekranda görülecek olan ve/veya ValidationSummary kontrolünün göstereceği hata mesajını tanımlar.

·                              Text: Geçersiz bir veri girişinde ekranda görülecek olan hata mesajını tanımlar. Boş bırakılırsa, kontrol ErrorMessage özelliğinde tanımlanmış olan mesajı gösterir.

·                              IsValid: Geçerlilik denetiminin sonucuna göre true veya false değerini alır.

·                              Enabled: True veya false değerini alır ve geçerlilik denetimi kontrolünün aktif halde olup olmadığını belirler.

·                              EnableClientSideScript: False olarak ayarlandığında hata denetimi sadece sunucu tarafında yapılırken, true olarak ayarlandığında DHTML destekleyen tarayıcılarda form sunucuya gönderilmeden önce istemci tarafında geçerlilik denetimi yapılır ve eğer herhangi bir geçerlilik denetimi hata verirse formun sunucuya gönderimi iptal olur.

·                              Validate: Bağlı olduğu kontrolün geçerlilik denetimini yapar ve IsValid özelliğini günceller.

·                              Display: Hata mesajının ne şekilde gösterileceğini belirler. 3 seçenek vardır:

1-      None: Geçerlilik denetimi mesajı ekranda gösterilmez ancak sayfaya ValidationSummary kontrolü eklenmişse orada görülür.

2-      Static: Mesaj, geçerlilik denetimi kontrolü sayfada nereye yerleştirilmişse orada gösterilir.

3-      Dynamic: Hata mesajı sayfaya dinamik olarak eklenir.

 

ASP.NET 2.0’da Geçerlilik Denetimi Kontrollerine eklenen bazı yeni özellikler:

·                    ValidationGroup: Geçerlilik denetimlerini gruplayarak geçerlilik denetiminin sadece o grupta bulunan kontrollere uygulanmasını sağlar. Böylece aynı sayfada farklı alanlar için birden fazla kontrol grubu oluşturulabilir.

·                    SetFocusOnError: Geçerlilik denetimi kontrolü, bağlı olduğu kontrolün geçersiz olması halinde formda ona odaklanılmasını sağlar.

·                    ValidateEmptyText: ASP.NET 1.0’da bağlı olduğu kontrol boş bırakılmışsa CustomValidator’ın devreye girmeme sorunu 2.0’da ValidateEmptyText özelliğiyle çözüldü. Bu özellik True yapılarak CustomValidator kontrolünün boş değerler için de geçerlilik denetimi yapması sağlanabilir.

 

ÖRNEK

Şimdi, örnek olarak bir web sitesine kayıt olan bir kullanıcıya ait kullanıcı adı, ad, soyad, doğum tarihi, cinsiyet, email ve şifre bilgilerinin girildiği alanları denetlemek için gerekli olan geçerlilik denetimi kontrollerini oluşturalım:

Ad, Soyad: Bu alanlar boş bırakılamasın. Bunun için iki alana birer RequiredFieldValidator atayacağız.

Doğum Tarihi: Bu alana tarih formatından başka formatta veri girilemesin ve girilen tarih değeri 1910-2005 yılları arasında olsun. Tarih formatı girildiğini kesinleştirmek için CompareValidator, belirli yıllar arasında tarih girilmediğini kontrol etmek içinse RangeValidator kullanacağız.

Cinsiyet: Doldurulması zorunlu alan olsun. DropDownList kontrolüne RequiredFieldValidator atayacağız.

Kullanıcı Adı: Bu alan boş bırakılamasın ve en az 4 karakterden oluşsun. RequiredFieldValidator ve CustomValidator kullanacağız.

Şifre ve Şifre Tekrar: Doldurulması zorunlu alan olsun, en az 8 alfanümerik karakterden oluşsun ve iki ayrı şifre alanına yazılan değerler aynı olsun. Doldurulmuş olduğunu kesinleştirmek için iki şifre alanına da RequiredFieldValidator, en az 8 alfanümerik karakterden oluşup oluşmadığını denetlemek için Şifre alanına CustomValidator, iki alana da aynı değerlerin yazılıp yazılmadığını denetlemek için de Şifre Tekrar alanına CompareValidator atayacağız.

E-mail: Doldurulması zorunlu olsun ve e-mail formatından başka formatta veri girilemesin. RequiredFieldValidator ve RegularExpressionValidator kullanacağız.

 

 

 

Sayfaya kontrolleri ekledikten sonra sıra geçerlilik denetimlerinin ayarlarını yapmaya geldi. İlk olarak hepsinde ortak olan özellikleri ayarlayalım. ControlToValidate özelliğiyle geçerlilik denetleyicileri teker teker ait oldukları kontrollere atanır:

 

 

        Bütün geçerlilik denetleyicilerinin ErrorMessage özelliğinde kontrollerin verecekleri hata mesajlarını yazalım.

        SetFocusOnError özelliğini bütün geçerlilik denetimi kontrolleri için True yapalım:

 

 

        Doğum tarihi alanındaki CompareValidator kontrolü TextBox’a girilen değerin tarih olup olmadığını kontrol edecek. Bunun için Operator özelliği DataTypeCheck ve Type özelliği Date olarak değiştirilir:

 

<asp:CompareValidator   ID="CompvDogumTarihi" runat="server"

ControlToValidate="txtDogumTarihi" ErrorMessage="Tarihi gg.aa.yyyy

formatında yazın." Font-Size="Medium" Operator="DataTypeCheck"

Type="Date" SetFocusOnError="True">

</asp:CompareValidator>

 

        Doğum tarihi alanındaki diğer geçerlilik denetimi kontrolü olan RangeValidator ile de girilen tarih değerlerinin 1910 ile 2005 yılları arasında olup olmadığını kontrol ettireceğiz. Type özelliğini Date, MinimumValue özelliğini 01/01/1910, MaximumValue özelliğini 01/01/2005 olarak ayarlamalıyız:

 

<asp:RangeValidator     ID="rvDogumTarihi" runat="server"

ControlToValidate="txtDogumTarihi" ErrorMessage="Geçerli bir tarih

yazın." Font-Size="Medium" MaximumValue="01/01/2005"

MinimumValue="01/01/1910" Type="Date" SetFocusOnError="True">

</asp:RangeValidator>

 

        Cinsiyet alanında kendisine bir RequiredFieldValidator atanmış bir DropDownList kontrolü var ve kullanıcının kadın veya erkek değerlerinden birini seçmesi zorunlu. RequiredFieldValidator’ın InitialValue özelliğine DropDownList’in ilk öğesi olan “Seçiniz” kelimesini yazıyoruz (RequiredFieldValidator kontrolüne InitialValue değeri atandığında, bağlı olduğu kontrol sadece InitialValue özelliğindeki değeri aldığı zaman geçersiz sayılır). Böylece kullanıcı kadın veya erkek değerlerinden birini seçmediği sürece DropDownList’te Seçiniz öğesi seçili olacak ve geçerlilik denetimi başarısız olacak:

 

<asp:RequiredFieldValidator   ID="rfvCinsiyet" runat="server"

ControlToValidate="DropDownList1" ErrorMessage="Cinsiyet alanı boş

bırakılamaz." Font-Size="Medium" InitialValue="Seçiniz"

SetFocusOnError="True">

</asp:RequiredFieldValidator>

 

        Sıradaki alan Kullanıcı Adı alanı ve bu alanın boş bırakılmaması, bu alana girilen değerin en az 4 karakterden oluşması isteniyor. Boş bırakılıp bırakılmadığını RequiredFieldValidator ile, girilen karakter sayısını CustomValidator ile denetleyeceğiz. Bunun için kod sayfasında CustomValidator kontrolünün ServerValidate metoduna aşağıdaki kodu yazmamız gerekir:

 

Protected Sub custvKullaniciAdi_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles custvKullaniciAdi.ServerValidate

        If Me.txtKullaniciAdi.Text.Length > 4 Then

            args.IsValid = True

        Else

            args.IsValid = False

        End If

    End Sub

 

        Şifre alanlarında ise iki alana da boş bırakılamaması birer için RequiredFieldValidator eklemeliyiz. Sonrasında ilk şifre alanına 8 karakterli alfanümerik bir değer girilip girilmediğini kontrol etmesi için atadığımız CustomValidator kontrolünün ServerValidate metoduna aşağıdaki kodu yazacağız:

 

Protected Sub custvSifre_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles custvSifre.ServerValidate

        Dim Sifre As String = Me.txtSifre.Text

        For x As Integer = 0 To Sifre.Length - 1

            For y As Integer = 0 To Sifre.Length - 1

                If IsNumeric(Sifre.Substring(x, 1)) AndAlso Not IsNumeric(Sifre.Substring(y, 1)) AndAlso Sifre.Length > 8 Then

                    args.IsValid = True

                    Exit Sub

                Else

                    args.IsValid = False

                End If

            Next

        Next

End Sub

 

        Sırada şifreyi tekrar girmemiz gereken alandaki CompareValidator konrolünün ayarları var. Bu geçerlilik denetleyicisi kullanıcının iki şifre alanında yazmış olduğu değerlerin aynı olup olmadığını kontrol edecek. ControlToCompare özelliğini karşılaştırma yapacağı kontrol olan txtSifre, ControlToValidate özelliğini ise denetleme yapacağı kontrol olan txtSifreTekrar olarak ayarlıyoruz. Ayrıca Operator özelliği Equal, Type özelliği de String olarak kalacak:

 

<asp:CompareValidator   ID="compvSifreTekrar" runat="server"

ControlToCompare="txtSifre" ControlToValidate="txtSifreTekrar"

ErrorMessage="Şifreler aynı olmak zorunda." Font-Size="Medium"

SetFocusOnError="True">

</asp:CompareValidator>

 

        Son sıradaki e-mail alanına ise doldurulması zorunlu olduğu için RequiredFieldValidator ve geçerli formatta veri girilmesini sağlamak için RegularExpressionValidator eklemiştik. RegularExpressionValidator kontrolünün ValidationExpression özelliğinde belirleyeceğimiz regular expression ifadesi ile kullanıcının girmiş olduğu değer karşılaştırılacak ve kullanıcı geçerli bir formatta veri girmemişse hata verecek. Regular expression ifadesini kendimiz oluşturabileceğimiz gibi, tasarım anında ValidationExpression özelliğini seçtiğimizde çıkan Regular Expression Editor aracılığıyla da önceden oluşturulmuş regular expression kalıpları arasından da seçebiliriz:

 

 

<asp:RegularExpressionValidator    ID="revEmail" runat="server”

ControlToValidate="txtEmail” ErrorMessage="Geçerli formatta bir

e-mail adresi yazın." Font-Size="Medium"

ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"

SetFocusOnError="True">

</asp:RegularExpressionValidator>

 

Yapmamız gereken birkaç ayar dışında geçerlilik denetimlerinin ayarları bitti. Eğer şimdi sayfayı çalıştırırsak ve örneğin doğum tarihi alanına geçerli bir tarih yazmazsak karşılaşacağımız manzara aşağıdaki gibi olacaktır:

 

 

Doğum tarihinin geçerli olup olmadığını denetleyen RangeValidator kontrolü doğum yılı 1776 yazıldığı için devreye girmiş ve hata mesajı ekranda görülmekte fakat tarih formatını denetleyen CompareValidator kontrolü tarih gg.aa.yyyy formatında girildiği için devreye girmemiş ve sayfada kendisine ayrılan yerde boşluk var. Kontrollerin hata mesajlarının böyle görüntülenmesinin sebebi Display özelliklerinin Static olmasıdır. Bu durumda hata mesajlarının sayfadaki yerleri başlangıçta ayrılır ve hata ne zaman oluşursa daha önceden ayrılmış olan yerde hata mesajı belirir. Kontrollerin Display özelliklerini Dynamic olarak değiştirdiğimizde ise hata mesajlarının sayfadaki yerleri önceden belirlenmez ve gerektiğinde sayfadaki diğer kontrollerle yer değiştirerek kullanıcıya gösterilirler.

Diyelim ki hata mesajlarını kontrollerin yanında değil de bir MessageBox içinde kullanıcıya göstermek, yanlarında ise o alanı vurgulamak için * işaretinin olmasını istiyoruz. Bunun için yapmamız gereken şey geçerlilik denetimi kontrollerinin Text özelliklerine * karakterini atamak, sayfaya bir ValidationSummary kontrolü eklemek ve ShowMessageBox özelliğini True olarak değiştirmek olacaktır:

 

<asp:ValidationSummary ID="ValidationSummary1" runat="server" Width="231px"

Font-Size="X-Small" ShowMessageBox="True" />

 

Eğer hata mesajlarının sayfada bir özet liste halinde görüntülenmesini istersek ShowSummary özelliğini True olarak ayarlamamız gerekir.

Bunları yaptıktan sonra sayfada geçerlilik kontrolleri aktif haldeyken görüntü aşağıdaki gibi olacaktır:

 

 

        Son olarak yukarıda bahsetmiş olduğum ASP 2.0 ile gelen yeniliklerden biri olan ValidationGroup özelliğini sayfadaki kontrollere uygulayacağız. Sayfada Gönder ve İptal olmak üzere iki adet düğme var ve şu anki haliyle kullanıcı hangisine basarsa bassın sayfadaki geçerlilik denetimi kontrolleri devreye giriyor. Biz ise geçerlilik denetiminin sadece Gönder düğmesinde devreye girmesini, İptal düğmesine basıldığında ise hiçbir denetim yapılmamasını istiyoruz. Bunu  sağlamak Gönder düğmesi ve sayfadaki geçerlilik denetimi kontrollerinin ValidationGroup özelliklerine ortak bir grup ismi (örneğin Kayit) atamamız, İptal düğmesinin ise ValidationGroup özelliğini boş bırakmamız yeterli olacaktır. Böylece sayfadaki geçerlilik denetimi sadece kullanıcı girmiş olduğu bilgileri göndermek istediğinde devreye girecek, İptal düğmesine bastığında ise sayfada geçerlilik denetimi yapılmayacaktır.

 

<asp:Button ID="btnGonder" runat="server" Text="Gönder" Width="144px"

ValidationGroup="Kayit" />

 

Bu makalemde Asp.Net validator kontrollerinden bahsettim. Bir başka makalede görüşmek üzere.

 

Işıl ORHANEL