Sul NerdDinner esempio di professionista ASP.NET MVC 1.0 c'è un metodo per creare una nuova cena come muggito copiato (pagina 89 della versione NerdDinner gratuita).
Qui controlla ModelState.IsValid per true. Sembra verificare se il modello è valido per il database (ovvero rileva le conversioni dei tipi di dati, ad esempio date con formato non valido, ma non regole aziendali). È vero?
Quando si invia il modulo, se si riscontra un errore nella data, ModelState.IsValid sarà falso e verrà restituito un errore, ma solo per la data perché AddRuleViolations non è mai stato eseguito. Se rimuovi completamente il segno di spunta per ModelState.IsValid, otterrai tutti gli errori (a causa dell'eccezione), incluso un contrassegno nella data in cui non è valido. Quindi, perché il controllo per ModelState.IsValid è presente? Mi sto perdendo qualcosa?
//
// 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);
}