Hay ocasiones en que considero que mi ModelState no es válido pero no puedo encontrar lo que lo ha invalidado porque no hay ModelErrors. ¿Cuál es la forma más fácil de determinar qué ha invalidado el estado de su modelo si usted mismo no ha agregado un ModelError?Qué puede hacer que ViewData.ModelState.IsValid se vuelva falso
Respuesta
Al mirar asp.net mvc source code, la propiedad IsValid en el ModelStateDictionary simplemente devuelve verdadero o falso según si hay algún error en ModelState ICollection en la propiedad Values.
Usted debe ser capaz de encontrar cualquier error incluyendo el mensaje y la excepción de esta manera:
foreach(var modelStateValue in ViewData.ModelState.Values)
{
foreach(var error in modelStateValue.Errors)
{
// Do something useful with these properties
var errorMessage = error.ErrorMessage;
var exception = error.Exception;
}
}
He encontré con un problema similar y, utilizando el mismo tipo de rutina que Steve siempre, encontrado una excepción estaba siendo lanzado (desvergonzadamente) en algún lugar dentro de la carpeta de modelo predeterminada que no llegó al Html.ValidationSummary.
El problema en particular que tuve fue un dropbox con opciones "Sí" o "No", con valores de "1" y "0" (en lugar de "verdadero" y "falso") y el Modelo Binder Ahogado en tratar de convertir estos a un booleano (que el miembro de mi entidad estaba esperando), indicando que 0 no es un valor válido para Boolean.
Hubiera esperado que se produjera un bonito mensaje que indicara que mi selección no era válida, pero en cambio me trataron con un ValidationSummary vacío. ¡Parece que se tragó la excepción! (y ahora es algo que estaré buscando en el futuro.) ¿Esto debería ser archivado con MS como un error?
¿Tiene una respuesta al respecto? –
Esto fue hace unos años, y recuerdo el problema pero no estoy tan seguro de recordar la respuesta. Creo que pude haber terminado escribiendo algún código de caso especial para realizar mi propia validación, sin depender más del encuadernador de modelo predeterminado para esto. (Es decir, consultar Request.Form directamente para resolver cualquier error por mi cuenta, asumiendo que ValidationSummary no siempre será útil.) ¿Esto estaba de vuelta en MVC 2, sin estar seguro si todavía es así en v4? – Funka
- 1. ¿Qué significa "devolver falso"; ¿hacer?
- 2. ¿Cómo hacer que la grilla ExtJS se vuelva a renderizar?
- 3. ¿Cómo puede ser que este contexto ambiental se vuelva nulo?
- 4. ¿Qué se puede hacer en Cpython que no se puede hacer en IronPython?
- 5. ¿Qué puede hacer eso que sed no puede hacer?
- 6. Hacer que el puntero del mouse se vuelva mano para hacer clic en el botón
- 7. ¿Qué puede hacer que node.js imprima y se elimine?
- 8. ¿qué puede hacer que pdb.set_trace() sea ignorado?
- 9. Cómo hacer que una clave asignada vuelva al comportamiento predeterminado
- 10. hacer mientras (falso) patrón
- 11. ¿Qué puede hacer que cambie Oracle ROWID?
- 12. ¿Qué se puede hacer con AppleScript?
- 13. ¿Cuándo puede ManualResetEvent.Set() devolver falso?
- 14. Qt :: ¿Qué tan pequeño se puede hacer?
- 15. No se puede hacer que Resque funcione
- 16. ¿Qué puede hacer Devise que Authlogic no puede?
- 17. Cómo hacer que vi vuelva a dibujar la pantalla?
- 18. EditText.setFocusable (falso); no se puede establecer en verdadero. :/
- 19. ¿Qué puede hacer que falle el ejecutivo? ¿Qué pasa después?
- 20. ¿Puede un objeto ser falso?
- 21. Hacer que no se vuelva a cargar JQuery si ya está en la página
- 22. ¿Qué puede hacer GlStencil?
- 23. ¿Cómo puedo hacer que mi mostrador parezca menos falso?
- 24. gitx ¿Cómo puedo hacer que mi 'CABEZA Independiente' se vuelva a comprometer en el maestro
- 25. Preformateando texto para evitar que se vuelva a dibujar
- 26. ¿Por qué usar la palabra "invalidar" para solicitar que se vuelva a dibujar una vista?
- 27. En desarrollo web: ¿Qué ASP.net puede hacer que PHP no puede hacer?
- 28. ¿Qué diseño puede hacer esto?
- 29. ¿Qué puede hacer que SqlClient reutilice las conexiones no válidas?
- 30. ¿Qué puede hacer que CGDisplayCreateImageForRect capture o ignore el cursor?
¡Esto es asombroso! +1 – TheOptimusPrimus