Thursday 5 November 2015

MVC Data Annotations for Model Validation

Data validation is a key aspect for developing web application. In Asp.net MVC, we can easily apply validation to web application by using Data Annotation attribute classes to model class. Data Annotation attribute classes are present in System.ComponentModel.DataAnnotations namespace and are availlable to Asp.net projects like Asp.net web application & website, Asp.net MVC, Web forms and also to Entity framework orm models.
Data Annotations help us to define the rules to the model classes or properties for data validation and displaying suitable messages to end users.
Validation attributes comes from System.ComponentModel.DataAnnotations. - 

Available validation attributes are-
System.ComponentModel.DataAnnotations.CompareAttribute
System.ComponentModel.DataAnnotations.CustomValidationAttribute
System.ComponentModel.DataAnnotations.DatatypeAttribute
System.ComponentModel.DataAnnotations.MaxLengthAttribue
System.ComponentModel.DataAnnotations.MinLengthAttribute
System.ComponentModel.DataAnnotations.RangeAttribute
System.ComponentModel.DataAnnotations.RegularExpressionAttribute
System.ComponentModel.DataAnnotations.RequiredAttribute
System.ComponentModel.DataAnnotations.StringLengthAttribute
System.Web.Security.MembershipPasswordAttribute
Data Annotation Validator Attributes are :- 

01. DataType

 Specify the datatype of a property

02. DisplayName

specify the display name for a property.

0.3 DisplayFormat

specify the display format for a property like different format for Date proerty.

04. Required

Specify a property as required.

05. ReqularExpression

validate the value of a property by specified regular expression pattern.

06. Range

validate the value of a property with in a specified range of values.

07. StringLength

specify min and max length for a string property.

08. MaxLength

specify max length for a string property.

09. Bind

specify fields to include or exclude when adding parameter or form values to model properties.

10. ScaffoldColumn

specify fields for hiding from editor forms.

Example :- 

  1. using System.ComponentModel;
  2. using System.ComponentModel.DataAnnotations;
  3. using System.Web.Mvc;
  4. namespace Employee.Models
  5. {
  6. [Bind(Exclude = "EmpId")]
  7. public class Employee
  8. {
  9. [ScaffoldColumn(false)]
  10. public int EmpId { get; set; }
  11. [DisplayName("Employee Name")]
  12. [Required(ErrorMessage = "Employee Name is required")]
  13. [StringLength(100,MinimumLength=3)]
  14. public String EmpName { get; set; }
  15. [Required(ErrorMessage = "Employee Address is required")]
  16. [StringLength(300)]
  17. public string Address { get; set; }
  18. [Required(ErrorMessage = "Salary is required")]
  19. [Range(3000, 10000000,ErrorMessage = "Salary must be between 3000 and 10000000")]
  20. public int Salary{ get; set; }
  21. [Required(ErrorMessage = "Please enter your email address")]
  22. [DataType(DataType.EmailAddress)]
  23. [Display(Name = "Email address")]
  24. [MaxLength(50)]
  25. [RegularExpression(@"[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}", ErrorMessage = "Please enter correct email")]
  26. public string Email { get; set; }
  27. }
  28. }
       

Once we have define validation to the model by using data annotations, these are automatically used by Html Helpers in views. For client side validation to work, please ensure that below two <SCRIPT> tag references are in the view.
  1. <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
  2. <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

Presenting the model in the view

  1. @model Employee.Models
  2. @{
  3. ViewBag.Title = "Employee Details";
  4. Layout = "~/Views/Shared/_Layout.cshtml";
  5. }
  6. @using (Html.BeginForm())
  7. {
  8. <div class="editor-label">
  9. @Html.LabelFor(m => m.EmpName)
  10. </div>
  11. <div class="editor-field">
  12. @Html.TextBoxFor(m => m.EmpName)
  13. @Html.ValidationMessageFor(m => m.EmpName)
  14. </div>
  15. <div class="editor-label">
  16. @Html.LabelFor(m => m.Address)
  17. </div>
  18. <div class="editor-field">
  19. @Html.TextBoxFor(m => m.Address)
  20. @Html.ValidationMessageFor(m => m.Address)
  21. </div>
  22. <div class="editor-label">
  23. @Html.LabelFor(m => m.Salary)
  24. </div>
  25. <div class="editor-field">
  26. @Html.TextBoxFor(m => m.Salary)
  27. @Html.ValidationMessageFor(m => m.Salary)
  28. </div>
  29. <div class="editor-label">
  30. @Html.LabelFor(m => m.Email)
  31. </div>
  32. <div class="editor-field">
  33. @Html.TextBoxFor(m => m.Email)
  34. @Html.ValidationMessageFor(m => m.Email)
  35. </div>
  36. <p> <input type="submit" value="Save" />
  37. </p>
  38. }

Some more example :-        
        [Required(ErrorMessage="FirstName Required:")]
        [DisplayName("First Name:")]
        [RegularExpression(@"^[a-zA-Z'.\s]{1,40}$",ErrorMessage="Special Characters not                                                                               allowed")]
        [StringLength(50, ErrorMessage = "Less than 50 characters")]
        public string FirstName { getset; }

        [Required(ErrorMessage="LastName Required:")]
        [RegularExpression(@"^[a-zA-Z'.\s]{1,40}$", ErrorMessage = "Special Characters                                                                           not allowed")]
        [DisplayName("Last Name:")]
        [StringLength(50, ErrorMessage = "Less than 50 characters")]
        public string LastName { getset; }

        [Required(ErrorMessage="EmailId Required:")]
        [DisplayName("Email Id:")]
        [RegularExpression(@"^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"                                                ErrorMessage = "Email Format is wrong")]
        [StringLength(50, ErrorMessage = "Less than 50 characters")]
        public string EmailId { getset; }

        [Required(ErrorMessage="Password Required:")]
        [DataType(DataType.Password)]
        [DisplayName("Password:")]
        [StringLength(30, ErrorMessage = "Less than 30 characters")]
        public string Password { getset; }

        [Required(ErrorMessage="Confirm Password Required:")]
        [DataType(DataType.Password)]
        [Compare("Password", ErrorMessage = "Confirm not matched.")]
        [Display(Name = "Confirm password:")]
        [StringLength(30, ErrorMessage = "Less than 30 characters")]
        public string ConfirmPassword { getset; }

        [Required(ErrorMessage="Street Address Required")]
        [DisplayName("Street Address1:")]
        [StringLength(100, ErrorMessage = "Less than 100 characters")]
        public string StreetAdd1 { getset; }

        [DisplayName("Street Address2:")]
        [StringLength(100, ErrorMessage = "Less than 100 characters")]
        public string StreetAdd2 { getset; }

        [Required(ErrorMessage="City Required")]
        [DisplayName("City:")]
        [RegularExpression(@"^[a-zA-Z'.\s]{1,40}$", ErrorMessage = "Special Characters                                                                           not allowed")]
        [StringLength(50, ErrorMessage = "Less than 50 characters")]
        public string City { getset; }

        [Required(ErrorMessage="State Required")]
        [DisplayName("State:")]
        [RegularExpression(@"^[a-zA-Z'.\s]{1,40}$", ErrorMessage = "Special Characters                                                                           not allowed")]
        [StringLength(50, ErrorMessage = "Less than 50 characters")]
        public string State { getset; }

        [Required(ErrorMessage="ZipCode Required")]
        [DisplayName("Zip Code:")]
        [StringLength(20, ErrorMessage = "Less than 20 characters")]
        public string Zip { getset; }

        [Required(ErrorMessage = "Enter Verification Code")]
        [DisplayName("Verification Code:")]
        public string Captcha { getset; }

No comments:

Post a Comment