Asp.Net Core Client Side Validation Complete Guide

 Last Update:2025-06-23T00:00:00     .NET School AI Teacher - SELECT ANY TEXT TO EXPLANATION.    8 mins read      Difficulty-Level: beginner

Understanding the Core Concepts of ASP.NET Core Client side Validation

ASP.NET Core Client Side Validation: A Comprehensive Guide

Overview of Client-Side Validation

Client-side validation occurs in the user's browser before submitting a form to the server. It helps in identifying and correcting errors early, improving the responsiveness of applications. ASP.NET Core leverages popular libraries like jQuery Validation and Unobtrusive Validation to provide seamless integration with client-side validation features.

Setting Up Client-Side Validation

  1. Include Necessary Scripts: ASP.NET Core projects automatically include jQuery and jQuery Validation scripts when creating a Razor Pages project or MVC projects. You can see these scripts in the _Layout.cshtml file under the Views/Shared folder. In case they are missing, you can add them manually:

    <script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.16.0/jquery.validate.min.js"></script>
    <script src="https://ajax.aspnetcdn.com/ajax/jquery.validation.unobtrusive/3.2.6/jquery.validate.unobtrusive.min.js"></script>
    
  2. Enable Unobtrusive Validation: Ensure that Unobtrusive Validation is enabled. This can be done in your Startup.cs or Program.cs file (depending on your project structure):

    services.AddRazorPages().AddRazorRuntimeCompilation();
    services.AddControllersWithViews().AddRazorRuntimeCompilation();
    

Using Data Annotations for Client-Side Validation

Data Annotations provide a declarative way to specify validation rules. When the form is rendered, ASP.NET Core adds HTML5 data attributes that are used by jQuery Validation to enforce these rules on the client-side.

Example Model with Data Annotations:

public class EmployeeModel
{
    [Required(ErrorMessage = "Name is required")]
    public string Name { get; set; }

    [Range(18, 70, ErrorMessage = "Age must be between 18 and 70")]
    public int Age { get; set; }

    [EmailAddress(ErrorMessage = "Please enter a valid email address")]
    public string Email { get; set; }

    [Phone(ErrorMessage = "Please enter a valid phone number")]
    public string Phone { get; set; }

    [DataType(DataType.Password)]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    public string Password { get; set; }

    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}

Form Example with Model Binding:

<form method="post">
    <div>
        <label asp-for="Name"></label>
        <input asp-for="Name" />
        <span asp-validation-for="Name" class="text-danger"></span>
    </div>
    <div>
        <label asp-for="Age"></label>
        <input asp-for="Age" />
        <span asp-validation-for="Age" class="text-danger"></span>
    </div>
    <div>
        <label asp-for="Email"></label>
        <input asp-for="Email" />
        <span asp-validation-for="Email" class="text-danger"></span>
    </div>
    <div>
        <label asp-for="Phone"></label>
        <input asp-for="Phone" />
        <span asp-validation-for="Phone" class="text-danger"></span>
    </div>
    <div>
        <label asp-for="Password"></label>
        <input asp-for="Password" />
        <span asp-validation-for="Password" class="text-danger"></span>
    </div>
    <div>
        <label asp-for="ConfirmPassword"></label>
        <input asp-for="ConfirmPassword" />
        <span asp-validation-for="ConfirmPassword" class="text-danger"></span>
    </div>
    <button type="submit">Submit</button>
</form>

Explanation:

  • Data Attributes: ASP.NET Core automatically adds data attributes like data-val="true" to the form elements, which specify the required validation rules.
  • Validation Messages: The asp-validation-for tag helper is used to display validation messages specific to each field.

Custom Validation

In addition to built-in validation attributes, you can also define custom validation rules. This is useful when you need to implement complex business logic or validation scenarios that aren’t covered by out-of-the-box data annotations.

Example of Custom Validation:

  1. Create a Custom Validation Attribute:

    public class GreaterThanAttribute : ValidationAttribute
    {
        private readonly string _comparisonProperty;
    
        public GreaterThanAttribute(string comparisonProperty)
        {
            _comparisonProperty = comparisonProperty;
        }
    
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            // Get the current property value
            object comparisonPropertyValue = validationContext.ObjectType
                .GetProperty(_comparisonProperty, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance)
                ?.GetValue(validationContext.ObjectInstance, null);
    
            if (value == null || comparisonPropertyValue == null)
            {
                return ValidationResult.Success;
            }
    
            // Compare the values
            if ((int)value <= (int)comparisonPropertyValue)
            {
                return new ValidationResult($"Field '{validationContext.DisplayName}' must be greater than '{_comparisonProperty}'.");
            }
    
            return ValidationResult.Success;
        }
    }
    
  2. Apply the Custom Validation Attribute to the Model Property:

    public class EmployeeModel
    {
        [Required(ErrorMessage = "Salary is required")]
        public int Salary { get; set; }
    
        [Required(ErrorMessage = "Bonus is required")]
        [GreaterThan(nameof(Salary))]
        public int Bonus { get; set; }
    }
    
  3. Client-Side Implementation: To enable client-side validation for custom validation attributes, you need to add the necessary JavaScript logic to interpret and enforce the rules. This often requires manually adding data attributes and custom validation methods.

Example Client-Side Custom Validation:

Online Code run

🔔 Note: Select your programming language to check or run code at

💻 Run Code Compiler

Step-by-Step Guide: How to Implement ASP.NET Core Client side Validation

Step by Step Guide to ASP.NET Core Client Side Validation

Prerequisites

  • Basic knowledge of ASP.NET Core
  • Visual Studio or any other code editor

Step 1: Create a New ASP.NET Core Web Application

  1. Open Visual Studio.
  2. Go to File > New > Project.
  3. Select ASP.NET Core Web Application.
  4. Name your project (e.g., AspNetCoreClientSideValidation) and click Create.
  5. Choose Web Application (Model-View-Controller) and click Create.
  6. Select .NET 7.0 (Long Term Support) or the latest stable version and click Create.

Step 2: Create a Model

We will create a model named Product that will be used in our forms and will have validation attributes.

  1. Right-click on the Models folder and select Add > Class.
  2. Name the class Product.cs and add the following code:
using System.ComponentModel.DataAnnotations;

namespace AspNetCoreClientSideValidation.Models
{
    public class Product
    {
        public int Id { get; set; }

        [Required(ErrorMessage = "Name is required.")]
        [StringLength(100, MinimumLength = 3, ErrorMessage = "Name must be between 3 and 100 characters.")]
        public string Name { get; set; }

        [Range(0.01, 1000.00, ErrorMessage = "Price must be between $0.01 and $1000.00.")]
        public decimal Price { get; set; }

        [Required(ErrorMessage = "Category is required.")]
        public string Category { get; set; }

        [Required(ErrorMessage = "Release Date is required.")]
        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
    }
}

Step 3: Create a Controller

Next, create a controller that will handle the form submission.

  1. Right-click on the Controllers folder and select Add > Controller.
  2. Choose MVC Controller with views, using Entity Framework and click Add.
  3. Set Model class to Product.
  4. Leave the Data context class blank as we are not using a database in this example.
  5. Name the controller ProductController and click Add.

Visual Studio will scaffold some actions and views automatically. However, you can modify them to add some custom validation.

Step 4: Modify the Create Action in Controller

Open ProductController.cs and modify the Create action to add the model to the view for validation:

using Microsoft.AspNetCore.Mvc;
using AspNetCoreClientSideValidation.Models;
using System.Threading.Tasks;

namespace AspNetCoreClientSideValidation.Controllers
{
    public class ProductController : Controller
    {
        [HttpGet]
        public IActionResult Create()
        {
            return View();
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("Id,Name,Price,Category,ReleaseDate")] Product product)
        {
            if (ModelState.IsValid)
            {
                // You can add your logic to save the product here
                return RedirectToAction(nameof(Index));
            }

            return View(product);
        }

        public IActionResult Index()
        {
            return View();
        }
    }
}

Step 5: Create the Create View

Open Create.cshtml in the Views/Product folder and modify it to include client-side validation:

@model AspNetCoreClientSideValidation.Models.Product

@{
    ViewData["Title"] = "Create";
}

<h1>Create Product</h1>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="Create">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Name" class="control-label"></label>
                <input asp-for="Name" class="form-control" />
                <span asp-validation-for="Name" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Price" class="control-label"></label>
                <input asp-for="Price" class="form-control" />
                <span asp-validation-for="Price" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Category" class="control-label"></label>
                <input asp-for="Category" class="form-control" />
                <span asp-validation-for="Category" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="ReleaseDate" class="control-label"></label>
                <input asp-for="ReleaseDate" class="form-control" />
                <span asp-validation-for="ReleaseDate" class="text-danger"></span>
            </div>
            <br/>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

<div>
    <a asp-action="Index">Back to List</a>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

Step 6: Add Validation Scripts

Ensure that the necessary validation scripts are included in your layout file. Open _Layout.cshtml located in Views/Shared and add the following lines before the closing </body> tag:

    <script src="~/lib/jquery/dist/jquery.min.js"></script>
    <script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
    <script src="~/lib/jquery-validation-unobtrusive/dist/jquery.validate.unobtrusive.min.js"></script>
</body>

Step 7: Test the Application

  1. Run the application by pressing F5 or clicking the Start button in Visual Studio.
  2. Navigate to Product/Create by clicking the appropriate link or by typing it manually in the browser.
  3. Fill out the form partially or incorrectly and click Create.
  4. You'll see the client-side validation error messages displaying without any page refresh.

Summary

In this guide, you learned how to set up and implement client-side validation in an ASP.NET Core web application using Data Annotations in your model and Razor views. This ensures that the client browser performs validations before sending the data to the server, improving the user experience and reducing server-side load.

Top 10 Interview Questions & Answers on ASP.NET Core Client side Validation

Top 10 Questions and Answers on ASP.NET Core Client-Side Validation

1. What is ASP.NET Core Client-Side Validation?

2. How does ASP.NET Core implement Client-Side Validation?

Answer: ASP.NET Core uses a combination of HTML5 attributes, data annotations, and JavaScript to implement client-side validation. Data annotations in your model properties are automatically translated into HTML5 validation attributes, and the jQuery Validation library is used to handle the client-side logic.

3. Which JavaScript libraries are required for Client-Side Validation in ASP.NET Core?

Answer: For client-side validation in ASP.NET Core, you need to include the following JavaScript libraries:

  • jQuery: Provides the core functionality needed by the validation library.
  • jquery.validate: Handles the actual validation logic.
  • jquery.validate.unobtrusive: Integrates with ASP.NET Core's validation system, automatically applying validation rules based on model data annotations.

4. How do I enable Client-Side Validation in an ASP.NET Core project?

Answer: To enable client-side validation:

  • Ensure you have the necessary JavaScript libraries included in your _Layout.cshtml or the specific view file.
  • Use data annotations in your model properties, for example, [Required], [StringLength], etc.
  • ASP.NET Core will automatically generate the necessary HTML attributes and validation scripts.

5. Can I customize error messages for Client-Side Validation?

Answer: Yes, you can customize error messages for client-side validation. You can specify a custom message in the data annotation attributes like this:

[Required(ErrorMessage = "Username is required.")]
public string Username { get; set; }

This will display the custom message when the Username field is left empty on the client side.

6. Can I implement custom Client-Side Validation in ASP.NET Core?

Answer: Yes, you can implement custom client-side validation in ASP.NET Core. You need to create a custom validation attribute in the server-side C# code and a corresponding jQuery validation method in JavaScript. Here’s a brief example:

  • C# Code:
    [AttributeUsage(AttributeTargets.Property)]
    public class CustomValidationAttribute : ValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            // Custom server-side validation logic.
            if (value == null)
            {
                return new ValidationResult("Custom error message.");
            }
            return ValidationResult.Success;
        }
    }
    
  • JavaScript Code:
    $.validator.addMethod("customrule", function (value, element) {
        // Custom client-side validation logic.
        return value !== null && value !== '';
    }, "Custom error message.");
    $.validator.unobtrusive.adapters.addBool("customrule");
    
  • Model Property:
    [CustomValidation(ErrorMessage = "Custom error message.")]
    [CustomRule(ErrorMessage = "Custom error message.")]
    public string MyProperty { get; set; }
    

7. How do I disable Client-Side Validation for a specific field?

Answer: If you need to disable client-side validation for a specific field, you can use the [ScaffoldColumn(false)] attribute or simply remove the validation attributes from the model property. Alternatively, you can use the [Remote] attribute for conditional validation.

8. Does ASP.NET Core support remote validation for Client-Side Validation?

Answer: Yes, ASP.NET Core supports remote validation using the [Remote] attribute. This allows you to perform server-side validation triggered by client-side events, such as losing focus on a field. The [Remote] attribute generates a JavaScript callback to a specified server action to perform additional validation.

[Remote("IsUsernameAvailable", "Account", ErrorMessage = "Username is already taken.")]
public string Username { get; set; }

9. How do I handle complex validation scenarios in ASP.NET Core?

Answer: For complex validation scenarios, you can create custom validation attributes as described in question 6. Additionally, consider using a validation framework like FluentValidation, which provides a more flexible and powerful way to define validation rules and messages.

10. What are the benefits of using Client-Side Validation in ASP.NET Core?

Answer: The benefits of using client-side validation in ASP.NET Core include:

  • Improved User Experience: Users receive immediate feedback and can correct errors before submitting the form, reducing frustration.
  • Reduced Server Load: Validation is handled on the client side, minimizing server-side processing for invalid data.
  • Faster Form Submission: Validation occurs immediately, allowing forms to be submitted more quickly when valid data is entered.
  • Enhanced Security: While client-side validation can be bypassed, using it in conjunction with server-side validation provides an additional layer of security.

You May Like This Related .NET Topic

Login to post a comment.