Auf der NerdDinner Beispiel für Professionelles ASP.NET MVC 1.0 es gibt eine Methode, um ein neues Abendessen zu erstellen, wie unten kopiert (Seite 89 der kostenlosen NerdDinner-Version).
Dort wird ModelState.IsValid auf true geprüft. Es scheint zu prüfen, ob das Modell für die Datenbank gültig ist (d.h. es erkennt Datentypkonvertierungen, wie z.B. Datumsangaben mit ungültigem Format, aber keine Geschäftsregeln). Ist das wahr?
Wenn beim Absenden des Formulars ein Fehler im Datum auftritt, wird ModelState.IsValid auf false gesetzt, und Sie erhalten einen Fehler zurück, allerdings nur für das Datum, da AddRuleViolations nie ausgeführt wurde. Wenn Sie die Prüfung für ModelState.IsValid vollständig entfernen, erhalten Sie alle Fehler (aufgrund der Ausnahme), einschließlich einer Markierung im Datum, wenn es ungültig ist. Warum ist dann die Prüfung auf ModelState.IsValid überhaupt vorhanden? Übersehe ich etwas?
//
// 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);
}