10 Mart 2015 Salı

Asp.Net Mvc Server Validation Kullanımı

Yorum Bırak
Asp.Net Mvc'de server taraflı validasyon kullanmak istiyorsak, projemiz içinde kullandığımız modelin property'lerine çeşitli anotasyonlar verebiliriz. Ve bu anotasyonlarla gelen validasyonlardan geçerse veri görüntülenir, geçmezse kullanıcıya uyarı verilir. Örneği aşağıdan inceleyebiliriz:


Model:

using System.ComponentModel.DataAnnotations;
namespace ServerValidation.Models
{
    public class Student
    {
        [Required(ErrorMessage = "Name is Required")]
        public string Name { get; set; }
        [Required(ErrorMessage = "Email is Required")]
        [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 is not valid")]
        public string Email { get; set; }
    }
} 
Burada kullandığımız model içindeki propertyleri belirledik. Örneğin; Name propertysine gerekli olduğunu üstüne yazdığımız [Required(ErrorMessage = "Name is Required")] anotasyonu ile belirledik. Eğer bu alan yoksa, view içinde bu alanı bağladığımız component(textbox) hata verecektir. Email alanına da gerekli olduğunu belirten anotasyon koyduk ve regular expression anotasyonu ile email yanlış formatta girildiğinde uyarı vermesini sağlamış olduk.

Controller:

using System.Web.Mvc;
using ServerValidation.Models;
namespace ServerValidation.Controllers
{
    public class StudentController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Index(Student model)
        {
            if (ModelState.IsValid)
            {
                ViewBag.Name = model.Name;
                ViewBag.Email = model.Email;
            }
            return View(model);
        }
    }
} 
Yukarıda da if (ModelState.IsValid)kod satırıyla modelin doğruluğunu kontrol ettik.

View:

@model ServerValidation.Models.Student 
@{
    ViewBag.Title = "Index";
}
 @if (ViewData.ModelState.IsValid)
    {
        if(@ViewBag.Name != null)
        {
            <b>
                Name : @ViewBag.Name<br />
                Email : @ViewBag.Email
            </b>
        }
    } 
@using (Html.BeginForm()) {
    @Html.ValidationSummary(true) 
    <fieldset>
        <legend>Student</legend> 
        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div> 
        <div class="editor-label">
            @Html.LabelFor(model => model.Email)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Email)
            @Html.ValidationMessageFor(model => model.Email)
        </div> 
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
} 

View kısmına da yukarıdaki gibi validason mesajlarımızı bastırmak için  @Html.ValidationMessageFor(model => model.Name) kodunu kullandık.

Projeyi çalıştırdığımızda create buttonuna basılınca aşağıdakine benzer bir görüntü olacaktır:




0 yorum:

Yorum Gönder