in Eski Blog Yazılarım

ASP.NET MVC2 Client-Side ve Server-Side Model Validation

Microsoft’un bu yıl içerisinde release ettiği ASP.NET MVC2 Framework web programcısının hayatını kolaylaştıran bir çok yenliklerle karşımıza geldi ve bu sürümden sonra bizde projelerimizde klasik Web Forms’ları bir kenara atıp daha test edilebilir ve yönetilebilir olan Model View Contoller pattern’nini benimsedik. Bu yazı da MVC2 ile birlikte daha pratik hale gelen "Model Validation" özelliğini projelerimize nasıl ugulayabileceğimizi paylaşmaya çalışacağım.

Önce Model’i Oluşturuyoruz!
Jargona uysun diye "Model" diyorum, normalde bir sınıf (class) yada nesne’de diyebiliriz. Öncelikle Nesnemizi ve elemanlarını oluşturuyoruz.

public class Personel
		{
        public string Name { get; set; }
        public string Surname { get; set; }
        public string Email { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
		public int Age { get; set; }        
		}

Modelimizi oluşturduktan sonra validasyon kurallarını attribute olarak belirliyebilir duruma geliyoruz.

Validasyonda Kullanabileceğimiz Veri Notlandırma (Data Annotations) Tipleri System.ComponentModel.DataAnnotations namespace’i altından ulaşılabilen Attributes’ler aşağıdadır.

RequiredAttribute

Bir property’nin gerekli olup olmadığınız belirtir. Örnek olarak : Zorunlu girilecek alanlar için kullanabilrisiniz.

StringLengthAttribute

Bir property’nin maksimum ve minimum karakter sayısının kaç olması gerektiğini belirtir. Örnek: Personel’in "Name" property’si en az 2 en fazla 15 karakter uzunluğunda olur kuralını uygulayabilirsiniz.

RegularExpressionAttribute

Bir property’nin belirttiğiniz Regex desenine (pattern) uygunluğunu denetler. Örnek: E-Posta adresinin doğru olup olmadığını konteol edebilrisiniz veya bir tarih formatının.

RangeAttribute

Bir property’nin belirli aralıktaki değerleri içerip içermediğini kontrol eder. Örnek : Personel modelindeki "Age" property’si 18 ile 55 arasında değer alabilir.

Kullanabileceğimiz Attribute’leri öğrendikten sonra artık modelimizi doğrulama kurallarını belirleyebiliriz.

public class Personel
    {
        [Required(ErrorMessage="İsim alanını boş bırakamazsınız.")]
        [StringLength(15,ErrorMessage="En az 3, En fazla 15 karakter girebilirsiniz", MinimumLength=2)]
        [DisplayName("İsim")]
        public string Name { get; set; }

        [Required(ErrorMessage = "Soyisim alanını boş bırakamazsınız.")]
        [StringLength(20, ErrorMessage = "En az 2, En fazla 15 karakter girebilirsiniz", MinimumLength = 2)]
        [DisplayName("Soyisim")]
        public string Surname { get; set; }

        [Required(ErrorMessage = "E-Posta alanını boş bırakamazsınız.")]
        [StringLength(255, ErrorMessage = "En fazla 255 karakter izniniz var.")]
        [RegularExpression("^[a-z0-9_\+-]+(\.[a-z0-9_\+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,4})$", ErrorMessage="Geçersiz E-Posta adresi")]
        [DisplayName("E-Posta")]
        public string Email { get; set; }

        [Required(ErrorMessage = "Kullanıcı adı alanını boş bırakamazsınız.")]
        [StringLength(15, ErrorMessage = "Kullanıcı adınız 15 karakterden uzun olamaz.")]
        [DisplayName("Kullanıcı Adı")]
        public string UserName { get; set; }

        [Required(ErrorMessage = "Şifre alanını boş bırakamazsınız.")]
        [StringLength(15, ErrorMessage = "Şifreniz 15 karakterden uzun olamaz.")]
        [DisplayName("Şifre")]
        public string Password { get; set; }

        [Range(18,55, ErrorMessage="Çalışanın yaşı en az 18 En fazla 55 olmalıdır.")]
        [DisplayName("Yaş")]
        public int Age { get; set; }        
    }

Model’imize validasyon kurallarının çerçevesini belirledik. Bundan sonrası vereceğimiz bir kaç basit direktifle MVC Framework bu kurallar çerçevesinde client side ve server side validasyonunu bizim için gerçekleştirecek.

Gelelim Modelimizin View’ine.

View’imizi oluştururken yine ASP.NET MVC2 ile birlikte daha gelişmiş özellikler katılan HtmlHelper sınıfıdan yararlanarak oluşturuyoruz. Yukarıdaki Modelimize göre oluşturacağımız View aşağıdaki gibidir.

<% Html.EnableClientValidation(); %>
<% using (Html.BeginForm()) {%>

            <fieldset>
                <legend>Personel Bilgileri</legend>

                <div class="editor-label">
                    <%: Html.LabelFor(m => m.Name) %>
                </div>
                <div class="editor-field">
                    <%: Html.TextBoxFor(m => m.Name) %>
                    <%: Html.ValidationMessageFor(m => m.Name) %>
                </div>


                <div class="editor-label">
                    <%: Html.LabelFor(m => m.Surname) %>
                </div>
                <div class="editor-field">
                    <%: Html.TextBoxFor(m => m.Surname)%>
                    <%: Html.ValidationMessageFor(m => m.Surname)%>
                </div>

                <div class="editor-label">
                    <%: Html.LabelFor(m => m.Age) %>
                </div>
                <div class="editor-field">
                    <%: Html.TextBoxFor(m => m.Age)%>
                    <%: Html.ValidationMessageFor(m => m.Age)%>
                </div>

                <div class="editor-label">
                    <%: Html.LabelFor(m => m.Email) %>
                </div>
                <div class="editor-field">
                    <%: Html.TextBoxFor(m => m.Email)%>
                    <%: Html.ValidationMessageFor(m => m.Email)%>
                </div>


                <div class="editor-label">
                    <%: Html.LabelFor(m => m.UserName) %>
                </div>
                <div class="editor-field">
                    <%: Html.TextBoxFor(m => m.UserName)%>
                    <%: Html.ValidationMessageFor(m => m.UserName)%>
                </div>


                <div class="editor-label">
                    <%: Html.LabelFor(m => m.Password) %>
                </div>
                <div class="editor-field">
                    <%: Html.TextBoxFor(m => m.Password)%>
                    <%: Html.ValidationMessageFor(m => m.Password)%>
                </div>

                </fieldset>                
                <p>
                    <input type="submit" value="Yeni Personel Oluştur" />
                </p>
<%} %>

Yukarıdaki kod’a ek olarak MVC2 Template’i ile birlikte gelen MicrosoftAjax.js ve MicrosoftMvcValidation.js dosyalarınıda Client side’ı aktifleştirdiğimiz web sayfamıza eklememiz gerekmektedir yoksa sayfa oluşturulurken javascript’leri tetiklemez.

Client-Side validation tamam. Şimdi gelelim server side validation’a.
Malum basit bit bypass ile javascript validation’larından kaçıp direkt sunucunuza doğru olmayan girdiler gönderebilirler ve uygulamanızda kendinden geçebilir. ASP.NET MVC’de bunun için çok paratik bir özellik var "ModelState.IsValid" hadi kullanalım!

[HttpPost]
        public ActionResult Index(Personel personel)
        {            
            if (ModelState.IsValid)
            {
                // Validasyon doğru personel parametresi ile güvenli bir şekilde işlem yapılabilir.               
            }

            return View();
        }

Ufak bir [if] koşulu (condition) ile sunucu taraflı kontrolünüzüde yapıp girilen verilerin doğruluğundan emin bir şekilde Model katmanındaki işleriniz rahatlıkla yapabilirsiniz. Hepsi bu kadar!

Bu yazıda kullandığım projeyi download edebilirsiniz.

Yorum Bırak

Comment