ASP.Net MVC Remote Validation
Remote validation, yani uzaktan doğrulama MVC 3 ile gelen kullanışlı bir özellik. Kullanım amacı ilgili parametrenin veritanında var olup olmadığını kullanıcıya kolayca göstermek. Şöyleki; bir kullanıcı kayıt sayfanız var ve kullanıcı adı herkese özel yani unique. Remote attribute'u sayesinde kullanıcı inputu girdiğinde kontrol işlemi başlıyor ve veritabanında aynı kullanıcı adının olup olmadığını kontrol edip geriye bir mesaj dönüyor.
Bu özelliği kullanabilmek için jQuery ve jQuery validation kütüphanelerinin sayfaya eklenmiş olması gerekir. Aynı zamanda web.config üzerinde appSetting'te aşağıdaki gibi olmalıdır ve ilgili entity'nin de System.ComponentModel.DataAnnotations (Remote attribute'u için) namespace'ini kullanıyor olması gerekiyor.
// Bundle olarak eklemek isterseniz @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/jqueryval") <span class="redactor-invisible-space"> // sadece script dosyalarini kullanmak isterseniz</span> <script src="~/Scripts/jquery-1.11.1.min.js" type="text/javascript"></script> <script src="~/Scripts/jquery.validate.min.js" type="text/javascript"></script> <script src="~/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script> <!-- web.config --> <appSettings> <add key="ClientValidationEnabled" value="true"/> <add key="UnobtrusiveJavaScriptEnabled" value="true"/> </appSettings>
Remote attribute'unun kullanımı aşağıdaki gibidir. Bir kullanıcı kayıt formunuz olduğunu varsayın.
public class Kullanici { [Required] [Remote("Kontrol", "Kullanici", ErrorMessage = "Bu kullanici adi baskasina ait.")] // "Kontrol" action methodu, "Kullanici" controller'ımızın adı, "ErrorMessage" eğer kullanıcı varsa gösterilecek hata mesajı (bunu controller tarafından da gönderebilirsiniz.) public string KullaniciAdi { get; set; } [Required] [DataType(DataType.Password)] public string Sifre { get; set; } }
@model Models.Kullanici @{ ViewBag.Title = "Kayıt Formu"; Layout = "~/Views/Shared/_Layout.cshtml"; } <h2>Yeni Kullanici Kaydı</h2> @using (Html.BeginForm()) { @Html.ValidationSummary(true) @Html.TextBoxFor(x => x.KullaniciAdi) <span class="redactor-invisible-space"> @Html.ValidationMessageFor(x => x.KullaniciAdi) </span> @Html.TextBoxFor(x => x.Sifre) <span class="redactor-invisible-space"> @Html.ValidationMessageFor(x => x.Sifre) </span> <button type="submit" class="btn btn-primary">Gönder</button> }
public ActionResult Kontrol(string kullanici_adi) { var count = db.Kullanicilar .Count(x => x.KullaniciAdi.Equals(kullanici_adi)); if (count == 0) return Json(true, JsonRequestBehavior.AllowGet); else return Json(false, JsonRequestBehavior.AllowGet); }
Eğer action'dan false değeri gelirse form üzerinde uyarı/hata mesajı çıkar ve submit butonu çalışmaz.