¿Cómo obtener todos los errores del estado del modelo ASP.Net MVC?

Resuelto chobo2 asked hace 15 años • 21 respuestas

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?

chobo2 avatar Aug 30 '09 09:08 chobo2
Aceptado

Usando LINQ :

IEnumerable<ModelError> allErrors = ModelState.Values.SelectMany(v => v.Errors);
mmutilva avatar Feb 08 '2011 15:02 mmutilva
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? .

Oren Trutner avatar Aug 30 '2009 04:08 Oren Trutner

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));
Dunc avatar Oct 22 '2011 17:10 Dunc

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

Yasser Shaikh avatar Dec 01 '2012 16:12 Yasser Shaikh

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>
Simon_Weaver avatar Dec 15 '2012 02:12 Simon_Weaver