How do I get the collection of Model State Errors in ASP.NET MVC?
To retrieve Model State Errors in ASP.NET MVC, run a concise LINQ query on the ModelState:
This approach extracts all the error messages into a single List<string>, which can then be tagged for display or logging.
Digging deeper into error-management
Validating ModelState
In an ASP.NET MVC application, validation errors that occur during model binding get conveniently scooped up by the ModelState. By checking ModelState.IsValid, we ensure no actions are performed on invalid data:
Pinning down specific errors
To identify errors without having to execute an action, use:
For a granular view of errors pertaining to individual properties, thumb through the errors a bit:
Crafty error formatting and rendering
For a custom error summary view, consider formatting the error messages into one tidy, readable string:
LINQ to wrangle errors
LINQ's SelectMany comes in handy to flatten nested collections while ModelState.Keys allows you to sweep through relevant properties:
Polishing error display and enhancing controls
User experience gets a boost by marking out fields with errors. This can be established by pairing errors with relevant controls like so:
Navigating the error sea
Once errors are caught, help users fix their input:
- Traverse through
ModelStateto list errors next to form fields. - Bring errors into sharp relief with conditional CSS classes.
- Deliver quick, realtime feedback using data annotations on your models.
Accessible error handling
Strive to make your errors accessible to every user, including those using screen readers:
- Attribute
aria-invalid="true"to inputs with errors for better accessibility. - Use
aria-liveregions for prompt feedback to screen reader users.
ModelState error handling best practices
Consider adopting these best practices:
- Log ModelState errors for auditing and troubleshooting.
- Avoid tech gibberish in error messages - be clear and actionable.
- Present errors without overwhelming users - small acts of kindness, like tooltips or inline messages, go a long way.
Was this article helpful?