2010-09-22 11 views
6

¿Hay algún uso para la sobrecarga de AddModelError() que toma una excepción como parámetro?Propósito de ModelState.AddModelError con el parámetro de excepción

Si incluyo el código siguiente en mi controlador:

ModelState.AddModelError("", new Exception("blah blah blah")); 
ModelState.AddModelError("", "Something has went wrong"); 

if (!ModelState.IsValid) 
    return View(model); 

y la siguiente en mi opinión:

<%= Html.ValidationSummary("Please correct the errors and try again.") %> 

Sólo entonces el texto "Algo tiene que salió mal" se muestra en el error resumen.

Respuesta

3

Comprobación de la fuente ModelError acepta ambas y el uso es para las fallas de conversión de tipo de modelo.

En este caso particular, es ir al árbol de excepciones y obtener excepciones internas cuando sea necesario para encontrar el error de raíz real en lugar de un mensaje de excepción de nivel superior genérico.

foreach (ModelError error in modelState.Errors.Where(err => String.IsNullOrEmpty(err.ErrorMessage) && err.Exception != null).ToList()) { 
    for (Exception exception = error.Exception; exception != null; exception = exception.InnerException) { 
     if (exception is FormatException) { 
      string displayName = propertyMetadata.GetDisplayName(); 
      string errorMessageTemplate = GetValueInvalidResource(controllerContext); 
      string errorMessage = String.Format(CultureInfo.CurrentCulture, errorMessageTemplate, modelState.Value.AttemptedValue, displayName); 
      modelState.Errors.Remove(error); 
      modelState.Errors.Add(errorMessage); 
      break; 
     } 
    } 
} 

Como se puede ver que está recorriendo la excepción en el ModelError encontrar un FormatException. Esta es la única referencia real que puedo encontrar en MVC 2 y MVC 3.

Dicho esto, probablemente no sea necesario para el uso regular.

+1

Noté que MVC 3 no parece incluir excepciones en la Validación. No obstante, no sé si es un error o diseño, pero deberían haberlo expresado claramente en sus documentos. Traté de pasar la nueva FormatException ("algo") - tampoco funcionó. –

Cuestiones relacionadas