Asp.net Validation (Onaylama/Kontrol) Kontrolleri

Doğrulama kontrolleri özellikle veriyi bir veri tabanı tablosuna gönderirken çok faydalıdır. Bu kontroller, kullanıcıların yanlış türde veri göndermesini önler. Asp.net’de altı tane doğrulama kontrolü vardır.

  • RequiredFieldValidator
  • RangeValidator
  • CompareValidator
  • RegularExpressionValidator
  • CustomValidator
  • ValidationSummary

Doğrulama kontrolleri varsayılan olarak hem istemcide (tarayıcı) hem de sunucuda doğrulama yapar. Bu doğrulama kontrolleri istemci tarafında doğrulama yapmak için JavaScript kullanılır. İstemci tarafı doğrulama çok hızlı bir şekilde çalışarak alanına geçersiz bir değer girildiğinde anında yanıt verir. Bazen tarayıcılar (mobil gibi) javascript’ti desteklememektedir. Bu durumda sunucu tarafı doğrulaması devreye girer.

Doğrulama kontrollerinin EnableClientScript özelliğine False değerini atayarak istemci tarafı doğrulamasını devre dışı bırakabiliriz.

Doğrulama kontrolleri, doğrulama hatası yoksa True değerini döndüren bir IsValid özelliğini destekler.

RequiredFieldValidator Kontrolü

Zorunlu bir alan olan, bir giriş kontrolü yapmak için kullanılır. Yani boş geçilemeyen alan oluşturmak istediğimizde kullanırız. Diğer doğrulama kontrolleri boş bir alan için doğrulama yapmazlar. Örneğin e-mail kontrolü ve boş geçilemez kontrolü yapmak isterseniz iki kontrolü de bir arada kullanmak zorundasınız.

Özellikleri

ControlToValidate: kontrolümüzün ilişkilendirileceği (yani kontrol edeceği) kontrolün ID’sini belirttiğimiz alan.
ErrorMessage: Kullanıcı veriyi girmeyi unutursa gösterilecek olan mesajı temsil eder.

Yukarıda belirtilen iki özelliği tüm ASP.NET doğrulama denetiminde ayarlamanız gerekir. Bu iki özellik, ValidationSummary konrolü dışındaki düm doğrulama kontrollerinde de ortaktır.

CompareValidator Kontrolü

Üç farklı doğrulama görevini gerçekleştirmek için kullanılır.

  • Veri tipi kontrolü yapmak için.
  • Girilen değeri, verilen bir sabit değerle karşılaştırmak için.
  • Girilen değeri, başka bir alanda girilen bir değerle karşılaştırmak için.

Özellikleri

ValueToCompare: Karşılaştırılacak sabit değer.
ControlToCompare: Karşılaştırılacak kontrolün ID’si.
Type: Karşılaştırma için değer türü. Desteklenen değerler String, Integer, Double, Date ve Currency.
Operator: Verilen değerler: DataTypeCheck, Equal, GreaterThan, GreaterThanEqual, LessThan, LessThanEqual ve NotEqual.

RangeValidator Kontrolü

Kullanıcı giriş verilerinin belirli bir değerler aralığında olduğunu denetler. Kontrolü sağlanan kontrole giriş değeri belirli bir minimum ve maksimum değer arasında olmalı, aksi halde hata verir.

Varsayılan olarak, tip özelliği string değerine sahiptir. Ama bu tipi denetimimize göre değiştirebiliriz. Örneğin, kullanıcının doğum tarih kontrolü için date değerini atamamız gerekir.

Özellikleri

MinimumValue: Doğrulama aralığının minimum değerini temsil eder.
MaximumValue: Doğrulama aralığının maksimum değerini temsil eder.
Type: String, Integer, Double, Date ve Currency.

RegularExpressionValidator Kontrolü

Önceden tanımlanmış olan kontrol desenlerinin kontrolünü sağlar. Örneğin telefon numarası, posta kodu, e-posta adresi, tarih ve benzeri. Bu kontrol, giriş verilerine uygulanan kontrol ifadesini ayarlamak için ValidationExpression özelliğini kullanır.

E-posta                    \w+([-+.’]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

Telefon numarası        ((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}

URL                      http://([\w-]+\.) + [\w-] + (/ [\w-./?% & =] *)?

ValidationSummary Kontrolü

Bu kontrol, bir Web sayfasındaki tüm doğrulama kontrollerinden gelen ve tek bir konumdaki hata mesajlarını özetler. ValidationSummary kontrol, büyük formlarla çalışırken oldukça faydalıdır.

Bir kullanıcı sayfanın sonunda bulunan alana yanlış değer girerse, kullanıcı hata mesajını asla göremeyebilir. ValidationSummary kontrolü, formun üstünde hataların listesini görüntüleyebilir. ErrorMessage ve ControlToValidate özelliğini desteklemez. Boş giriş alanı veya yanlış veriler nedeniyle hata oluşursa, otomatik olarak MessageBox veya özet şeklinde hata mesajını görüntüler.

Özellikleri

DisplayMode: BulletList(sıralı liste), List(liste), SingleParagraph(tek satır)
HeaderText: Doğrulama özetinin üstünde başlık metnini görüntüler.
ShowMessageBox: Bir açılır uyarı kutusu görüntülemek için kullanılır.
ShowSummary: Sayfadaki doğrulama özetini gizler.

Örnek Validator Kullanımı

Şuana kadar gördüğümüz tüm validator kontrollerini kullanabileceğimiz bir örnek form yapımı.

Form Taslak:

aspx tarafı:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Validation.aspx.cs" Inherits="WebApplication1.Validation" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <table>
        <tr>
            <td>Adı Soyadı: </td>
            <td>
                <asp:TextBox ID="txt_AdSoyad" runat="server"></asp:TextBox>
            </td>
            <td>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="Boş geçilemez." ControlToValidate="txt_AdSoyad" ForeColor="Red"></asp:RequiredFieldValidator>
            </td>
        </tr>
        <tr>
            <td>E-Mail Adresi:</td>
            <td><asp:TextBox ID="txt_Email" runat="server"></asp:TextBox></td>
            <td>
                <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="Geçerli bir mail adresi giriniz." ControlToValidate="txt_Email" ForeColor="Red" ValidationExpression="\w+([-+.’]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"></asp:RegularExpressionValidator>
            </td>
        </tr>
        <tr>
            <td>Yaşınız:</td>
            <td>
                <asp:TextBox ID="txt_Yas" runat="server"></asp:TextBox>
            </td>
            <td>
                <asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="txt_Yas" ErrorMessage="18 Yaşından büyük olmalısınız." ForeColor="Red" MaximumValue="100" MinimumValue="18" Type="Integer"></asp:RangeValidator>
            </td>
        </tr>
        <tr>
            <td>Şifre:</td>
            <td>
                <asp:TextBox ID="txt_Sifre" runat="server"></asp:TextBox>
            </td>
            <td style="margin-left: 80px">
                
                 </td>
        </tr>
        <tr>
            <td>Şifre Tekrar:</td>
            <td>
                <asp:TextBox ID="txt_SifreTekrar" runat="server"></asp:TextBox>
            </td>
            <td>
                <asp:CompareValidator ID="CompareValidator1" runat="server" ControlToCompare="txt_Sifre" ControlToValidate="txt_SifreTekrar" ErrorMessage="Girdiğiniz değerler eşleşmiyor." ForeColor="Red"></asp:CompareValidator>
            </td>
        </tr>
        <tr>
            <td> </td>
            <td>
                <asp:Button ID="Button1" runat="server" Text="Button" />
            </td>
            <td>
                <asp:ValidationSummary ID="ValidationSummary1" runat="server" HeaderText="Formu Kontrol Ediniz" />
            </td>
        </tr>
     </table>
    </form>
</body>
</html>

CustomValidator Kontrolü

ASP.NET, farklı doğrulama seçenekleri sağlayan dahili doğrulama kontrolleri sunar. Bunların hepsini yukarıda işledik. Bazı durumlarda ise, bu dahili doğrulama kontrolleri istediğiniz özellikleri kapsamayabilir. Bu durumda özelleştirilebilen doğrulama kontrolü istersiniz. CustomValidator kontrolü tam olarak sizlere bu hizmeti sunar.

CustomValidator kontrolü, kendi kontrolünüzü yaratmanıza ve bu kontrolün sayfadaki diğer kontrollerle çalışmasına izin verir. Istemci tarafında yürütülecek doğrulama kodunu JavaScript kullanarak, sunucu tarafı doğrulamasını ise c# kullanarak yapabilirsiniz. CustomValidator kontrolü, istemci tarafında, sunucu tarafında veya her ikisinde de çalışabilir.

Istemci Tarafı-CustomValidator Kontrol

Adım 1, Bir Textbox ve CustomValidator’ı sürükleyin, CustomValidator’ın ControlToValidate ve ErrorMessage özelliklerini ayarlayın.

Adım 2, Javascript fonksiyonu oluşturun.

Adım 3, CustomValidator’ın ClientValidationFunction özelliğini kullanın ve javascript fonksiyonunu ekleyin.

Sunucu Tarafı-CustomValidator Kontrol

CustomValidator kontrolünü web sayfasında sürükleyin. ControlToValidate ve ErrorMessage özelliğini ayarlayın. CustomValidator kontrolüne çift tıklayın fonksiyonuna gidin.

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args )
{

}

Bir kullanıcının giriş doğrulamasını aşağıdaki kriterlerle istediğini varsayalım.

  • Şifre 6-12 karakter arasında olmalıdır.
  • Bir büyük harf olmalı.
  • Bir küçük harf içermelidir.
  • Bir sayısal değere sahip olmalı.

aspx tarafı

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CustomValidation.aspx.cs" Inherits="CustomValidation" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>    
        <asp:Label ID="Label1" runat="server" Text="Password"></asp:Label>
 <asp:TextBox ID="txtPassword" runat="server" Width="143px" ToolTip="Password must be between 6-12 characters and include 1 capital letter, 1 lowercase letter, and 1 number"></asp:TextBox>
        <asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="txtPassword" 
            ErrorMessage="Password must be between 6-12 characters and include 1 capital letter, 1 lowercase letter, and 1 number" OnServerValidate="CustomValidator1_ServerValidate"></asp:CustomValidator>
        <br />
        <br />
        <br />
        <asp:Button ID="Button1" runat="server" Text="Login" />    
    </div>
    </form>
</body>
</html>

aspx.cs tarafı

using System;
using System.Web.UI.WebControls;
public partial class CustomValidation : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args )
     {
          string inputData = args.Value;        
          args.IsValid = false;        
          if (inputData.Length < 6 || inputData.Length > 12) return;       
          bool upperCase = false;
          foreach (char ch in inputData)
          {
                if (ch >= 'A' && ch <= 'Z')
                {
                       upperCase = true; 
                       break;
                }
           }
           if (!upperCase) return;       
           bool lowerCase = false;
           foreach (char ch in inputData)
           {
                  if (ch >= 'a' && ch <= 'z')
                  {
                         lowerCase = true; break;
                   }
            }
            if (!lowerCase) return;      
            bool number = false;
            foreach (char ch in inputData)
           {
                 if (ch >= '0' && ch <= '9')
                 {
                        number = true; break;
                 }
            }
            if (!number) return;        
            args.IsValid = true;
       }
}

4 comments

  1. Hocam Merhaba,

    Bir üyelik formu yapıyorum. Şifre alanlarını CompareValidator ile kontrol ediyorum şöyle bir problemim var. Şayet şifre tekrar alanı boş bırakılırsa hata vermiyor ve kaydı gerçekleştiriyor. Ben Şifre Tekrar alanını da boş geçilemez alan yapmak istiyorum. CompareValidator uygulanan bir textbox’ı nasıl RequiredFieldValidator gibi boş geçilemez alan haline getirebiliriz. Aynı problemi E-Posta kısmında da yaşıyorum RegularExpressionValidator uyguladım hatalı mail girdiğinizde uyarıyor fakat hiç mail adresi girmediğiniz de kaydı gerçekleştiriyor. Bu sorunu nasıl çözebilirim?

  2. Hocam tamam halletim aslında aslında az önce yaptığımdan farklı bir şey de yapmadım ama şimdi oldu 🙂 az önce CompareValidator uyguladığım bölüme ayrıca RequiredFieldValidator uygulayınca sayfa patlamıştı şimdi tekrar denedim sorunsuz çalışıyor.

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir