Mvc Model Validation
Bu makalede .Net Mvc Model Validation işlemini inceleyeceğiz. Model – View – Controller mimarisinde hali hazırda yer alan Model Validation , View ile Controller arasında mekik dokuyan modellerimizi belirli kurallarla işletmemize olanak sağlar. Validation işlemlerini Client-Side ve Server-Side olarak ikiye ayırabiliriz.Şimdi tam bu sırada System.ComponentModel.DataAnnotations sınıfına göz atalım.
DataAnnotations
veri denetimlerine yönelik tanımların bulunduğu, sınıfın hazır sunduğu kontrollerin yeterli olmadığı veya ihtiyacın farklılaştığı durumlarda sınıf üzerinde özelleştirme yapabildiğimiz değerli yapılardan biridir. DataAnnotations metodları ile ilgili detaylı incelemeye msdn üzerinden (buradan) ulaşabilirsiniz. Model validation işlemine dönecek olursak, validation işlemi DataAnnotations ile Server-Side olarak yapılır. Bazı durumlarda ise Client-Side validation kullanırız. Client-Side validation modeli için gerekli ama yetersiz demek yanlış olmaz. Örneğin Login işleminde Kullanıcı Adı ve Şifre olmadan giriş yapamayız. Şimdi gerekli ama yetersiz kelimesine açıklık getireyim.
Gerekli : çünkü Client-Side null kontrolü yapıp Server üzerinden çağrı yapmaktan kaçınıyoruz. Kullanıcının yaptığı hatayı direkt olarak arayüzde karşılıyoruz ve düzeltmeye zorluyoruz.
Yetersiz : Yetersiz olduğu durum ise biraz jquery, javascript bilgisiyle client-side kontroller aşılabilir ve server taraflı kontrol olmazsa programımız hataya düşebilir.
Şimdi örneğimize geçelim. Birkaç validation’ı bir arada kullanacağımız bir form oluşturacağız.
Model
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
namespace bilisimIOModelValidation.Models { public class ContactModel { [Required(ErrorMessage = "Alan boş geçilemez")] [MinLength(2, ErrorMessage = "Minimum 2 karakterlik giriş yapmalısınız")] public string Name { get; set; } [Required(ErrorMessage = "Alan boş geçilemez")] [MinLength(2, ErrorMessage = "Minimum 2 karakterlik giriş yapmalısınız")] public string SurName { get; set; } [DataType(DataType.EmailAddress)] [EmailAddress] public string EMailAddress { get; set; } } } |
Modelimizi belirlediğimiz kurallarla yukarıdaki gibi oluşturuyoruz. required attribute’ u ile zorunluluğu MinLength ile kelime uzunluğunu belirliyoruz.
View
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
@model bilisimIOModelValidation.Models.ContactModel @using (Html.BeginForm()) { @Html.ValidationSummary(false) <div> <div style=""></div> </div> <table> <tr> <td>Ad</td> <td>@(Html.EditorFor(p=>p.Name))</td> <td>@(Html.ValidationMessageFor(p => p.Name))</td> </tr> <tr> <td>Soyad</td> <td>@(Html.EditorFor(p => p.SurName))</td> <td>@(Html.ValidationMessageFor(p => p.SurName))</td> </tr> <tr> <td>EMail</td> <td>@(Html.EditorFor(p => p.EMailAddress))</td> <td>@(Html.ValidationMessageFor(p => p.EMailAddress))</td> </tr> </table> <input type="submit" value="Gönder" /> } |
yukarıdaki kod blogunda basit bir form sayfası oluşturduk. Şimdi kodlara daha yakından bakalım.
1 2 3 4 5 6 |
// validation işleminde aldığımız hataları ilgili yerde liste şeklinde gösterir @Html.ValidationSummary(false) |
1 2 3 4 5 6 |
// Email adres nesnesinden dönan hatayı gösterir @(Html.ValidationMessageFor(p => p.EMailAddress)) |
Controller
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/// Contact modelimizi ModelState.IsValid ile kontrol ediyoruz. /// Model üzerinde belirlenen Validation Attribute'leri kontol eder ve /// doğrulama yapar. Hatalı alanlar direk olarak view üzerinde render edilir. public ActionResult Contact(ContactModel model) { if (ModelState.IsValid) { ViewBag.Message = "Doğrulama başarılı"; } else { ViewBag.Message = "Doğrulama başarısız.."; } return View(model); } |
örnekle birlikte Server-Side Model validation işlemi ile form kontrolünü tamamlamış olduk.
Referans
MSDN Validation
H.Burak Karadağ