ASP.NET MVC Validation İşlemleri

WEB sayfası denince tabiki kullanıcılardan bilgi aldığımız form sayfaları gelir akla. Biz yazılımcılar verilerin belli bir düzende alınıp işlenmesini isteriz. Örneğin bir eposta adresinin düzgün girilmesini isteriz veya Ad soyad gibi bilgiler için zorunlu girilmesini isteyebiliriz. İşte bu nedenler bize validation işlemlerini zorunlu kılmaktadır. Peki bu işlemi nasıl yapılır.Öncelikle bir model oluşturalım.

    public class BilgiFormu
    {
        public string AdSoyad { get; set; }

        public int SabitTelefon { get; set; }

        public string CepTelefon { get; set; }

        public Nullable<System.DateTime> DogumTarihi { get; set; }

        public string Eposta { get; set; }

        public string AltertatifEposta { get; set; }

        public string Sifre { get; set; }

        public string SifreTekrar { get; set; }

        public int SorumluSayisi { get; set; }
    }

Örnek modeli şimdi gerekli validation özellikleri yeniden düzenleyelim;

    public class BilgiFormu
    {
        [Required(ErrorMessage = "{0} alanı boş geçilemez!")]
        [StringLength(50, ErrorMessage = "{0} alanı en az 2 karakter uzunluğunda olmalıdır!", MinimumLength = 2)]
        [Display(Name = "Adı Soyadı")]
        public string AdSoyad { get; set; }

        [Required(ErrorMessage = "{0} alanı boş geçilemez!")]
        [Range(1000000, 9999999, ErrorMessage = "{0} 7 haneden oluşmaldır!")]
        [Display(Name = "Sabit Telefon")]
        public int SabitTelefon { get; set; }

        [DataType(DataType.PhoneNumber)]
        [Display(Name = "Cep Telefonu")]
        [Required(ErrorMessage = "{0} alanı boş geçilemez")]
        [RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$",
                        ErrorMessage = "{0} uygun değil. ")]
        public string CepTelefon { get; set; }

        [Required(ErrorMessage = "{0} alanı boş geçilemez!")]
        [DataType(DataType.DateTime, ErrorMessage = "{0} formatı hatalı!")]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
        [Display(Name = "Doğum Tarihi")]
        public Nullable<System.DateTime> DogumTarihi { get; set; }

        [StringLength(50, ErrorMessage = "{0} alanı en fazla {1} karakter uzunluğunda olmalıdır!")]
        [Required(ErrorMessage = "{0} alanı boş geçilemez!")]
        [RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
                            @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
                            @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$",
                            ErrorMessage = "Email adresi geçersiz!")]
        [Display(Name = "E-Posta")]
        public string Eposta { get; set; }

        [Required(ErrorMessage = "{0} alanı boş geçilemez")]
        [EmailAddress(ErrorMessage = "{0} geçersiz")]
        [Display(Name = "Alternatif Eposta Adresi")]
        public string AltertatifEposta { get; set; }

        [Required(ErrorMessage = "{0} alanı boş geçilemez!")]
        [StringLength(50, ErrorMessage = "{0} alanı en fazla {1}, en az {2} karakter uzunluğunda olmalıdır!", MinimumLength = 2)]
        [DataType(DataType.Password)]
        [Display(Name = "Şifre")]
        public string Sifre { get; set; }

        [Compare("Sifre", ErrorMessage = "İki şifre eşleşmiyor!")]
        [DataType(DataType.Password)]
        [Display(Name = "Şifre Tekrar")]
        public string SifreTekrar { get; set; }

        [Required(ErrorMessage = "{0} alanı boş geçilemez!")]
        [Range(10, 90, ErrorMessage = "{0} en az 1 en çok 2 basanmak giriniz")]
        [Display(Name = "Sorumlu Sayısı")]
        public int SorumluSayisi { get; set; }
    }

Bu özellikleri eklediğinizde using bölümüne using System.ComponentModel.DataAnnotations;; ifadesini eklemelisiniz.Eklediğimiz özellikler amacı şunlardır.

Required : Bilginin gerekli olduğunu ifade etmek için.

Compare : Bilgileri karşılaştırmak için, örnekte şifre ile şifre tekrar alanı karşılaştırılıyor.

Range : Bilginin aralığını vermek için kullanılır.

RegularExpression : Bilgide olması gerekli karakterleri bildirmek amacıyla kullanılır.

StringLength : Bilgi minimum ve maksimum kaç karakterden oluşacağını belirler.

Display : Modelin ismi ekranda nasıl gözükecek onu belirler.

DataType : Bilginin türü için kullanılır.

Tırnak içerisinde bulunan {0} ifadeleri model isimlerinin istediğimiz yerde gözükmesi içindir.Telefon ve Mail için farklı şekillerde validation yapılabildiğine dikkat ediniz.Evet bir HomeController oluşturup şu kodu yazalım;

   public ActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public ActionResult BilgiKayit(BilgiFormu bilgi)
        {
            if (ModelState.IsValid)
            {
                //doğrulama yapılmış ise yapılacak işlemler.
                return View("Index", bilgi );
            }

            //doğrulama yapılmamış ise yapılacak işlemler.
            return View("Index");
        }

Şimdi View kısmını tasarlayalım;

   @using (Html.BeginForm("BilgiKayit", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
        @Html.ValidationSummary(true)
        <table>
            <tr>
                <td>@Html.LabelFor(k => k.AdSoyad)</td>
                <td>:</td>
                <td>@Html.EditorFor(k=> k.AdSoyad)</td>
                <td>@Html.ValidationMessageFor(k=> k.AdSoyad)</td>
            </tr>
            <tr>
                <td>@Html.LabelFor(k=> k.SabitTelefon)</td>
                <td>:</td>
                <td>@Html.TextBoxFor(k=> k.SabitTelefon)</td>
                <td>@Html.ValidationMessageFor(k=> k.SabitTelefon)</td>
            </tr>
            <tr>
                <td>@Html.LabelFor(k=> k.CepTelefon)</td>
                <td>:</td>
                <td>@Html.TextBoxFor(k=> k.CepTelefon)</td>
                <td>@Html.ValidationMessageFor(k=> k.CepTelefon)</td>
            </tr>
            <tr>
                <td>@Html.LabelFor(k=> k.SorumluSayisi)</td>
                <td>:</td>
                <td>@Html.TextBoxFor(k=> k.SorumluSayisi)</td>
                <td>@Html.ValidationMessageFor(k=> k.SorumluSayisi)</td>
            </tr>
            <tr>
                <td>@Html.LabelFor(k=> k.DogumTarihi)</td>
                <td>:</td>
                <td>@Html.TextBoxFor(k=> k.DogumTarihi)</td>
                <td>@Html.ValidationMessageFor(k=> k.DogumTarihi)</td>
            </tr>
            <tr>
                <td>@Html.LabelFor(k=> k.Eposta)</td>
                <td>:</td>
                <td>@Html.TextBoxFor(k=> k.Eposta)</td>
                <td>@Html.ValidationMessageFor(k=> k.Eposta)</td>
            </tr>
            <tr>
                <td>@Html.LabelFor(k=> k.AltertatifEposta)</td>
                <td>:</td>
                <td>@Html.TextBoxFor(k=> k.AltertatifEposta)</td>
                <td>@Html.ValidationMessageFor(k=> k.AltertatifEposta)</td>
            </tr>
            <tr>
                <td>@Html.LabelFor(k=> k.Sifre)</td>
                <td>:</td>
                <td>@Html.PasswordFor(k=> k.Sifre)</td>
                <td>@Html.ValidationMessageFor(k=> k.Sifre)</td>
            </tr>
            <tr>
                <td>@Html.LabelFor(k=> k.SifreTekrar)</td>
                <td>:</td>
                <td>@Html.PasswordFor(k=> k.SifreTekrar)</td>
                <td>@Html.ValidationMessageFor(k=> k.SifreTekrar)</td>
            </tr>
          
            <tr>
                <td colspan="3" align="Right"><input type="submit" value="Kaydet" /></td>
                <td></td>
            </tr>
        </table>
    }
</body>

Çalıştırın text kutularına hiç birşey girmeden Kaydet butonuna basın sonuç;

Bilgileri Eksik girin Kaydet butonuna basın, sonuç,

Hepsi bu kadar. İyi çalışmalar.



Etiketler
Required Display Range StringLength EmailAddress Compare
Mesaj Yaz