Roadmap › ASP.NET Core MVC (and Razor Pages) › Module: Models, Binding and Validation
Lessons in this course (15)
6. Validation with data annotations
Basic★ Must knowLesson 6 of 15
csharp
public class ProductInput
{
[Required, StringLength(100, MinimumLength = 3)]
public string Name { get; set; } = "";
[Range(1, 1_000_000)]
[DataType(DataType.Currency)]
public decimal Price { get; set; }
[EmailAddress] public string? SupplierEmail { get; set; }
[RegularExpression(@"^[A-Z]{3}-\d{4}$", ErrorMessage = "SKU must look like ABC-1234")]
public string Sku { get; set; } = "";
[Remote(action: "SkuAvailable", controller: "Products")] // AJAX check via jQuery unobtrusive validation
public string? Code { get; set; }
}- Server-side:
ModelState.IsValid(always check — client validation can be bypassed). - Client-side: jQuery Validation + Unobtrusive (
_ValidationScriptsPartial) readsdata-val-*attributes generated by tag helpers. - Custom rules: a
ValidationAttributesubclass orIValidatableObject.Validate()for cross-field rules; FluentValidation library for complex rules. - Add errors manually:
ModelState.AddModelError(nameof(input.Sku), "SKU already exists");