En el ejemplo NerdDinner de Professional ASP.NET MVC 1.0 hay un método para crear una nueva cena como se copia a continuación (página 89 de la versión gratuita de NerdDinner).
Allí comprueba que ModelState.IsValid sea verdadero. Parece verificar si el modelo es válido para la base de datos (es decir, captura conversiones de tipos de datos, como fechas con formato no válido, pero no reglas de negocios). ¿Es eso cierto?
Al enviar el formulario, si tiene un error en la fecha, ModelState.IsValid será falso y obtendrá un error, pero solo para la fecha porque AddRuleViolations nunca se ejecutó. Si elimina completamente la verificación de ModelState.IsValid, obtendrá todos los errores (debido a la excepción), incluida una marca en la fecha en que no es válida. Entonces, ¿por qué está ahí la comprobación de ModelState.IsValid? ¿Me estoy perdiendo de algo?
//
// POST: /Dinners/Create
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Dinner dinner) {
if (ModelState.IsValid) {
try {
dinner.HostedBy = "SomeUser";
dinnerRepository.Add(dinner);
dinnerRepository.Save();
return RedirectToAction("Details", new {id = dinner.DinnerID });
} catch {
ModelState.AddRuleViolations(dinner.GetRuleViolations());
}
}
return View(dinner);
}
fuente
var errors = ModelState.Values.SelectMany(v => v.Errors);
con un punto de interrupción para ver cualquier problema de validación.De la errata:
ModelState.AddRuleViolations(dinner.GetRuleViolations());
Debiera ser:
ModelState.AddModelErrors(dinner.GetRuleViolations());
Referencia: http://www.wrox.com/WileyCDA/WroxTitle/Professional-ASP-NET-MVC-1-0.productCd-0470384611,descCd-ERRATA.html
fuente
AddModelErrors
método no existe.ModelState.AddModelErrors()
método existeModelState.AddModelError
existe el método no plural .Sí, Jared y Kelly Orr tienen razón. Yo uso el siguiente código como en la excepción de edición.
en vez de
fuente
Todos los campos del modelo que tienen tipos definidos, deben validarse cuando se devuelven al controlador. Si alguno de los campos del modelo no coincide con su tipo definido, ModelState.IsValid devolverá falso. Porque, estos errores se agregarán en ModelState.
fuente