Im NerdDinner- Beispiel von Professional ASP.NET MVC 1.0 gibt es eine Methode zum Erstellen eines neuen Abendessens als unten kopiert (Seite 89 der kostenlosen NerdDinner-Version).
Dort prüft es ModelState.IsValid auf true. Es scheint zu prüfen, ob das Modell für die Datenbank gültig ist (dh es erfasst Datentypkonvertierungen, z. B. Daten mit ungültigem Format, jedoch keine Geschäftsregeln). Ist das wahr?
Wenn Sie beim Senden des Formulars einen Fehler im Datum haben, ist ModelState.IsValid falsch und Sie erhalten einen Fehler zurück, jedoch nur für das Datum, da AddRuleViolations nie ausgeführt wurde. Wenn Sie die Prüfung für ModelState.IsValid vollständig entfernen, werden alle Fehler (aufgrund der Ausnahme) angezeigt, einschließlich einer Markierung im Datum, an dem sie ungültig ist. Warum wird dann überhaupt nach ModelState.IsValid gesucht? Vermisse 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);
}
quelle
var errors = ModelState.Values.SelectMany(v => v.Errors);
mit einem Haltepunkt, um Validierungsprobleme anzuzeigen.Aus den Errata:
ModelState.AddRuleViolations(dinner.GetRuleViolations());
Sollte sein:
ModelState.AddModelErrors(dinner.GetRuleViolations());
Referenz: http://www.wrox.com/WileyCDA/WroxTitle/Professional-ASP-NET-MVC-1-0.productCd-0470384611,descCd-ERRATA.html
quelle
AddModelErrors
Methode nicht mehr.ModelState.AddModelErrors()
MethodeModelState.AddModelError
Methode.Ja, Jared und Kelly Orr haben recht. Ich benutze den folgenden Code wie in Bearbeitungsausnahme.
anstatt
quelle
Alle Modellfelder mit bestimmten Typen sollten überprüft werden, wenn sie an Controller zurückgegeben werden. Wenn eines der Modellfelder nicht mit dem definierten Typ übereinstimmt, gibt ModelState.IsValid false zurück. Diese Fehler werden in ModelState hinzugefügt.
quelle