Usage

Install xVal.WebForms

Install the xVal.WebForms package with NuGet.

xval-webforms-add-library-package-reference.png

Or you can use the package manager console:

PM> Install-Package xVal.WebForms

Add Validation Attributes

Decorate a model's properties with validation attributes. You can also add class validation attributes or implement IValidatableObject.

    public class Booking : IValidatableObject
    {
        [Required(ErrorMessage = "Client name is required.")]
        [StringLength(15, ErrorMessage = "Client name must be less than 15 characters.")]
        public string ClientName { get; set; }

        [Range(1, 20, ErrorMessage = "Number of guests must be between 1 and 20.")]
        public int NumberOfGuests { get; set; }

        [Required(ErrorMessage = "Arrival date is required.")]
        [DataType(DataType.Date, ErrorMessage = "Arrival date is invalid.")]
        public DateTime ArrivalDate { get; set; }

        [Required(ErrorMessage = "Smoking type is requried.")]
        public SmokingType SmokingType { get; set; }

        [Required(ErrorMessage = "Email address is required.")]
        [DataType(DataType.EmailAddress, ErrorMessage = "Email address is invalid.")]
        public string EmailAddress { get; set; }

        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            if (ArrivalDate == DateTime.MinValue)
            {
                yield return new ValidationResult("Arrival date is required.", new[] {"ArrivalDate"});
            }

            // Business rule: Can't place bookings on Sundays
            if (ArrivalDate.DayOfWeek == DayOfWeek.Sunday)
            {
                yield return new ValidationResult("Bookings are not permitted on Sundays.", new[] {"ArrivalDate"});
            }
        }
    }

Add Script References

The NuGet package installs the jquery and jquery validate scripts in the Scripts folder.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head runat="server">
    <title></title>
    <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
    <script src="<%: ResolveUrl("~/Scripts/jquery-1.4.4.min.js") %>" type="text/javascript"></script>
    <script src="<%: ResolveUrl("~/Scripts/jquery.validate.min.js") %>" type="text/javascript"></script>
    <asp:ContentPlaceHolder ID="HeadContent" runat="server">
    </asp:ContentPlaceHolder>
</head>

Add Validators

Create a form and add a ModelPropertyValidator for each input control.

        <fieldset class="booking">
            <legend>Booking</legend>
            <asp:ValidationSummary ID="valSummary" runat="server" />
            <label for="txtClientName">
                Your name:</label>
            <asp:TextBox ID="txtClientName" runat="server" />
            <val:ModelPropertyValidator ID="valClientName" runat="server" CssClass="validator"
                ControlToValidate="txtClientName" Display="Dynamic" PropertyName="ClientName"
                ModelType="xVal.WebForms.Demo.Booking" />
            <label for="txtNumberOfGuests">
                Number of guests:</label>
            <asp:TextBox ID="txtNumberOfGuests" runat="server" />
            <val:ModelPropertyValidator ID="valNumberOfGuests" runat="server" CssClass="validator"
                ControlToValidate="txtNumberOfGuests" Display="Dynamic" PropertyName="NumberOfGuests"
                ModelType="xVal.WebForms.Demo.Booking" />
            <label for="txtArrivalDate">
                Arrival date:</label>
            <asp:TextBox ID="txtArrivalDate" runat="server" />
            <val:ModelPropertyValidator ID="valArrivalDate" runat="server" CssClass="validator"
                ControlToValidate="txtArrivalDate" Display="Dynamic" PropertyName="ArrivalDate"
                ModelType="xVal.WebForms.Demo.Booking" />
            <label for="txtEmailAddress">
                Email address:</label>
            <asp:TextBox ID="txtEmailAddress" runat="server" />
            <val:ModelPropertyValidator ID="valEmailAddress" runat="server" CssClass="validator"
                ControlToValidate="txtEmailAddress" Display="Dynamic" PropertyName="EmailAddress"
                ModelType="xVal.WebForms.Demo.Booking" />
            <div>
                <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click" /></div>
        </fieldset>

Validation Groups

Validation groups require that your pages inherit from ModelPage. Long story short, the validators implement IValidator instead of BaseValidator so that the standard validation scripts aren't injected into the page.

Example coming soon.

Demo Project

Download the source and take a look at the demo website for a full example.

Last edited Jul 6, 2011 at 4:46 AM by jrummell, version 2

Comments

No comments yet.