¿Dónde puedo encontrar la lista de errores que hacen que el ModelState no sea válido? No vi ninguna propiedad de errores en el objeto ModelState.ModelState.IsValid == falso, ¿por qué?
Respuesta
Sobre "puede ser que 0 errores y IsValid == false": aquí está el código fuente de MVC https://github.com/Microsoft/referencesource/blob/master/System.Web/ModelBinding/ModelStateDictionary.cs#L37-L41
public bool IsValid {
get {
return Values.All(modelState => modelState.Errors.Count == 0);
}
}
Ahora, parece que no puede ser. Bueno, eso es para ASP.NET MVC v1.
La propiedad ModelState en el controlador es en realidad un objeto ModelStateDictionary. Puede recorrer las teclas del diccionario y usar el método IsValidField para verificar si ese campo en particular es válido.
bool hasErrors = ViewData.ModelState.Values.Any(x => x.Errors.Count > 1);
o iterar con
foreach (ModelState state in ViewData.ModelState.Values.Where(x => x.Errors.Count > 0))
{
}
podría ser posible que todos los valores tienen 0 errores y la ModelState seguir siendo válido? – Omu
El modelo statestate tendrá una clave "Propiedad" y un error asociado en el diccionario. el mensaje de error podría estar en blanco, pero el recuento de errores reflejará el recuento de propiedad que no es válido. Porque el método ModelStateDictionary.AddModelError toma una clave y Exception o error String; se requiere agregar un error modelo. –
Como es probable que esté programando en Visual Studio que tomaría una mejor ventaja de la posibilidad de utilizar los puntos de interrupción de las medidas de depuración sencillos (obtener una idea de cuál es el problema como en tu caso). Simplemente colóquelos justo enfrente/en el lugar donde verifica ModelState.isValid y desplace el cursor sobre el ModelState. Ahora puede navegar fácilmente por todos los valores que están dentro y ver qué error hace que el retorno inválido sea falso.
A veces una carpeta arroja una excepción sin mensaje de error. Puede recuperar la excepción con el siguiente fragmento de averiguar cuál es incorrecto:
(A menudo, si el ligante está tratando de convertir cadenas a tipos complejos, etc.)
if (!ModelState.IsValid)
{
var errors = ModelState.SelectMany(x => x.Value.Errors.Select(z => z.Exception));
// Breakpoint, Log or examine the list with Exceptions.
}
Este código fue muy útil para mí, pero iterando los errores (Excepciones) para obtener cada .Message dio como resultado "referencia de objeto no establecida en una instancia de un objeto". Cuando cambié z.Exception a z.ErrorMessage, pude mostrar los mensajes de error. – StackOverflowUser
Como se acaba me ha pasado - presente también puede ocurrir cuando agrega una propiedad requerida a su modelo sin actualizar su formulario. En este caso, el ValidationSummary no mostrará el mensaje de error.
Pegue el siguiente código en ActionResult de su controlador y coloque el depurador en este punto.
var errors = ModelState
.Where(x => x.Value.Errors.Count > 0)
.Select(x => new { x.Key, x.Value.Errors })
.ToArray();
- 1. ASP.NET MVC - ModelState.IsValid es falso, ¿cómo omitir?
- 2. ¿Por qué es falso ProgressEvent.lengthComputable?
- 3. Javascript: ¿Por qué si (falso)?
- 4. ¿Por qué is_array() devuelve falso?
- 5. ASPNET MVC: ¿Por qué ModelState.IsValid es falso "El campo x es obligatorio" cuando ese campo tiene un valor?
- 6. ¿Por qué XMLHttpRequest ProgressEvent.lengthComputable podría ser falso?
- 7. ¿Por qué esta declaración IF devuelve falso?
- 8. ¿Por qué (0-6) es -6 = Falso?
- 9. ¿Por qué $ ("cuerpo") == $ ("cuerpo") devuelve falso?
- 10. ¿Por qué isNaN (123.) Devuelve falso?
- 11. En Oracle, ¿por qué es '' = '' falso?
- 12. Request.Browser.IsMobileDevice = falso para Android, ¿por qué?
- 13. ¿Para qué sirve ModelState.IsValid en ASP.NET MVC en NerdDinner?
- 14. ModelState.IsValid o Model.IsValid?
- 15. ¿Es posible actualizar ModelState.IsValid manualmente?
- 16. ModelState.IsValid vs IValidateableObject en MVC3
- 17. boost :: call_traits - ¿Por qué gcc da falso para esto?
- 18. ¿Por qué verdadero/falso está en mayúscula en Python?
- 19. ¿Por qué usar `return x == 5? true: falso; `?
- 20. ¿Por qué es (1 <NaN) falso en JavaScript?
- 21. ¿Por qué no se evalúa nulo en falso?
- 22. Declaración de preparación de Mysqli: volviendo falso, pero ¿por qué?
- 23. ¿Por qué (= (vector nil) (vec nil)) devuelve falso?
- 24. ¿Por qué (1 en [1,0] == Verdadero) evaluar a Falso?
- 25. ¿Por qué event.bubbles es falso para "focusin" y "focusout"? Hace
- 26. ¿por qué podría un cheque if (document.addEventListener) devuelve falso
- 27. ¿Qué significa "devolver falso"; ¿hacer?
- 28. Crear objeto falso por interfaz
- 29. falso/FALSO - ¿alguna diferencia?
- 30. ¿Recibe el mensaje de error si falla ModelState.IsValid?
me parece que no debería, ¿algo está mal en Values.All (modelState => modelState.Errors.Count == 0)? – Omu
Observe que el error puede ser Mensaje o Excepción; por ejemplo Html.ValidationSummary no muestra excepciones (por razones de seguridad, supongo); tal vez es por eso que no ve errores? ¿Cómo verifica si no hay errores? – queen3
ModeloEstado.IsValid da falso – Omu