2009-03-26 19 views

Respuesta

36

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; 
    } 
} 
+0

¡Esto es asombroso! +1 – TheOptimusPrimus

4

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?

+0

¿Tiene una respuesta al respecto? –

+0

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

Cuestiones relacionadas