ASP.NET Core Tutorialprovides basic and advanced concepts of C# for beginners and professionals.

Form Handling and Validation in ASP.NET Core using Data Annotations

Back to: ASP.NET Core Tutorial

Form handling in ASP.NET Core MVC involves creating models, binding them to forms in views, and validating input. Data Annotations are attributes you apply to model properties to enforce validation rules. They simplify server-side validation and can also trigger client-side validation using unobtrusive JavaScript.


📦 Common Data Annotation Attributes

Attribute Description
[Required] Field must not be empty.
[StringLength] Sets maximum (and optionally minimum) string length.
[Range] Limits a numeric value range.
[EmailAddress] Validates email format.
[Compare] Compares two properties (e.g., Password/Confirm).
[RegularExpression] Validates format with a regex pattern.
[DataType] Specifies type like DataType.DatePassword.
[Display] Sets a friendly name for the UI.

🧱 Example: Model with Data Annotations

csharp
 
public class RegisterViewModel
{
    [Required]
    [Display(Name = "User Name")]
    public string UserName { get; set; }

    [Required]
    [EmailAddress]
    public string Email { get; set; }

    [Required]
    [StringLength(100, MinimumLength = 6)]
    [DataType(DataType.Password)]
    public string Password { get; set; }

    [Compare("Password", ErrorMessage = "Passwords do not match.")]
    [DataType(DataType.Password)]
    public string ConfirmPassword { get; set; }
}
 

🧩 Razor View: Form with Validation

html
 
@model RegisterViewModel

<form asp-action="Register" method="post">
    <div asp-validation-summary="All" class="text-danger"></div>

    <div>
        <label asp-for="UserName"></label>
        <input asp-for="UserName" class="form-control" />
        <span asp-validation-for="UserName" class="text-danger"></span>
    </div>

    <div>
        <label asp-for="Email"></label>
        <input asp-for="Email" class="form-control" />
        <span asp-validation-for="Email" class="text-danger"></span>
    </div>

    <div>
        <label asp-for="Password"></label>
        <input asp-for="Password" class="form-control" />
        <span asp-validation-for="Password" class="text-danger"></span>
    </div>

    <div>
        <label asp-for="ConfirmPassword"></label>
        <input asp-for="ConfirmPassword" class="form-control" />
        <span asp-validation-for="ConfirmPassword" class="text-danger"></span>
    </div>

    <button type="submit" class="btn btn-primary">Register</button>
</form>
 

✅ Controller Action

csharp
 
[HttpPost]
public IActionResult Register(RegisterViewModel model)
{
    if (ModelState.IsValid)
    {
        // Process registration
        return RedirectToAction("Success");
    }

    // Return view with validation errors
    return View(model);
}
 

⚙️ Enable Client-Side Validation

Make sure these are included in your _Layout.cshtml or view:

html
 
@section Scripts { <partial name="_ValidationScriptsPartial" /> }

This loads the required jQuery validation libraries via the built-in partial.


🧪 Validation Summary

  • ✅ Data Annotations are declarative and simple to use.

  • ✅ Validation happens on both client and server.

  • ⚠️ Always validate on the server — client-side validation can be bypassed.

  • 🔄 Combine with ModelState.IsValid to ensure data integrity.

  •  
Scroll to Top