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

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.

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.

  • RequiredFieldValidator : input kontrolünün herhangi bir değer taşıyıp taşımadığını kontrol eder.

  • RegularExpressionValidator : input kontrolünün değerini programcının belirlediği regular expression ile karşılaştırıp kontrol eder.

  • CompareValidator : Programcının belirlediği iki input kontrolünün değerini veya input kontrolünün değeri ile yine programcının belirlediği bir değeri karşılaştırır.

  • RangeValidator : input kontrolünün değerinin belirli bir aralıkta olup olmadığını kontrol eder.

  • CustomValidator : Özelleştirilmiş validation kontrolleri geliştirmenizi sağlar.

  • ValidationSummary : Formdaki tüm validation hatalarının özetini 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.

  • ErrorMessage : Bu özelliğin değeri, kontrolün onaylaması istenen değerde uygunsuz bir durum olduğunda hata mesajı olarak gösterilir. Ayrıca ValidationSummary''de de bu mesaj gösterilir.

  • Display : Validation kontrolleri onaylayacakları değer hatalı olana kadar gizli beklerler. Kullanıcı veriyi girerken istenmeyen bir format kullanmışsa hata mesajı gösterilir. Display özelliğinin üç muhtemel değeri vardır.

  • Display="Static" : Mesajın gösterilmesi için gerekli alan başlangıçta ayrılır.
  • Display="Dynamic" : Hata mesajının gösterilmesi için yer ayrılmaz ve gerektiğinde sayfanın diğer içeriği ile yer değiştirilerek gösterilir.
  • Display="None" : ValidationSummary kullanılmadıkça hata mesajı gösterilmez. Mesaj özette gösterilir.

    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
    Validation örneğine ait ekran görüntüsü..


    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.

    , ,

    Arşivden

  • Yorum bulunmuyor.

    Yorum yazabilirsiniz


    * [b], [i] ve [quote] serbest