ASP.NET Core validates models using data annotations and ModelState. Invalid submissions re-render forms with error messages—same idea as Django forms or Java Bean Validation.
Common attributes
[Required],[StringLength(100)],[EmailAddress][Range(1, 100)],[Compare("Password")][RegularExpression]for custom patterns
public class LoginViewModel {
[Required][EmailAddress]
public string Email { get; set; } = "";
[Required][DataType(DataType.Password)]
public string Password { get; set; } = "";
}
Server-side check
if (!ModelState.IsValid)
return View(model);
Client-side validation via jQuery Unobtrusive or similar is optional UX—never trust it alone.
Important interview questions and answers
- Q: FluentValidation vs annotations?
A: Annotations are simple on properties; FluentValidation suits complex rules in separate classes. - Q: API validation response?
A: [ApiController] auto-returns 400 with ProblemDetails when ModelState invalid.
Self-check
- What checks ModelState in an MVC action?
- Why validate on the server even with client JS?
Tip: Re-display bound forms on validation failure so users do not retype everything—return View(model) with the same instance and show asp-validation-for messages.