¿Cómo obtener todos los errores del estado del modelo ASP.Net MVC?
Quiero eliminar todos los mensajes de error de modelState sin conocer los valores clave. Recorriendo para capturar todos los mensajes de error que contiene ModelState.
¿Cómo puedo hacer esto?
Aceptado
Usando LINQ :
IEnumerable<ModelError> allErrors = ModelState.Values.SelectMany(v => v.Errors);
foreach (ModelState modelState in ViewData.ModelState.Values) {
foreach (ModelError error in modelState.Errors) {
DoSomethingWith(error);
}
}
Consulte también ¿Cómo obtengo la colección de errores de estado del modelo en ASP.NET MVC? .
Basado en la versión LINQ, si desea unir todos los mensajes de error en una sola cadena:
string messages = string.Join("; ", ModelState.Values
.SelectMany(x => x.Errors)
.Select(x => x.ErrorMessage));
Pude hacer esto usando un poco de LINQ,
public static List<string> GetErrorListFromModelState
(ModelStateDictionary modelState)
{
var query = from state in modelState.Values
from error in state.Errors
select error.ErrorMessage;
var errorList = query.ToList();
return errorList;
}
El método anterior devuelve una lista de errores de validación.
Otras lecturas :
Cómo leer todos los errores de ModelState en ASP.NET MVC
Durante la depuración, encuentro útil colocar una tabla en la parte inferior de cada una de mis páginas para mostrar todos los errores de ModelState.
<table class="model-state">
@foreach (var item in ViewContext.ViewData.ModelState)
{
if (item.Value.Errors.Any())
{
<tr>
<td><b>@item.Key</b></td>
<td>@((item.Value == null || item.Value.Value == null) ? "<null>" : item.Value.Value.RawValue)</td>
<td>@(string.Join("; ", item.Value.Errors.Select(x => x.ErrorMessage)))</td>
</tr>
}
}
</table>
<style>
table.model-state
{
border-color: #600;
border-width: 0 0 1px 1px;
border-style: solid;
border-collapse: collapse;
font-size: .8em;
font-family: arial;
}
table.model-state td
{
border-color: #600;
border-width: 1px 1px 0 0;
border-style: solid;
margin: 0;
padding: .25em .75em;
background-color: #FFC;
}
</style>