Quiero obtener todos los mensajes de error del modelState sin conocer los valores clave. Recorriendo para obtener todos los mensajes de error que contiene ModelState.
¿Cómo puedo hacer esto?
asp.net-mvc
modelstate
chobo2
fuente
fuente
@Html.ValidationSummary()
es una forma rápida de mostrarlos a todos en maquinilla de afeitar.foreach (var error in ViewData.ModelState.Values.SelectMany(modelState => modelState.Errors)) { DoSomething(error); }
Respuestas:
Consulte también ¿Cómo obtengo la colección de errores de estado del modelo en ASP.NET MVC? .
fuente
Value.ErrorMessage
y, en su lugar, unValue.Exception.Message
foreach (KeyValuePair<string, ModelState> kvp in htmlHelper.ViewData.ModelState) {
e insertar esta línea debajo de él:var modelState = kvp.Value;
. Puede obtener la clave dekvp.Key
Usando LINQ :
fuente
List<string> errors = new List<string>()
lugar devar errors = new List<string>()
es realmente una pérdida de tiempo, pero escribirIEnumerable<ModelError> allErrors = ModelState.Values.SelectMany(v => v.Errors);
, donde el tipo de retorno no es realmente claro, es realmente mayor en términos de legibilidad. (incluso si Visual Studio puede dárselo con el mouse)Basándose en la versión LINQ, si desea unir todos los mensajes de error en una sola cadena:
fuente
Pude hacer esto usando un pequeño LINQ,
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
fuente
Durante la depuración me resulta útil poner una tabla en la parte inferior de cada una de mis páginas para mostrar todos los errores de ModelState.
fuente
Como descubrí que he seguido los consejos en las respuestas dadas hasta ahora, puede obtener excepciones sin que se configuren mensajes de error, por lo que para detectar todos los problemas, realmente necesita obtener tanto el Mensaje de error como la Excepción.
o como un método de extensión
fuente
En caso de que alguien quiera devolver la propiedad Nombre del modelo para vincular el mensaje de error en una vista fuertemente tipada.
De esta forma, puede vincular el error con el campo que arrojó el error.
fuente
Enviar solo los mensajes de error en sí no fue suficiente para mí, pero esto funcionó.
fuente
Por si acaso alguien lo necesita, lo hice y uso la siguiente clase estática en mis proyectos
Ejemplo de uso:
Usos
Clase:
fuente
Y esto también funciona:
fuente
SelectMany
está disponible.Útil para pasar una matriz de mensajes de error a View, quizás a través de Json:
fuente
Esto se está ampliando con la respuesta de @Dunc. Ver comentarios de documentos xml
fuente
Además,
ModelState.Values.ErrorMessage
puede estar vacío, peroModelState.Values.Exception.Message
puede indicar un error.fuente
En su implementación, le falta Clase estática, esto debería ser.
más bien
fuente
simplemente use Asistente de etiqueta asp-validation-summary
fuente