Sur l' exemple NerdDinner de Professional ASP.NET MVC 1.0, il existe une méthode pour créer un nouveau dîner copié ci-dessous (page 89 de la version gratuite de NerdDinner).
Là, il vérifie ModelState.IsValid pour true. Il semble vérifier si le modèle est valide pour la base de données (c'est-à-dire qu'il détecte les conversions de type de données, comme les dates au format invalide, mais pas les règles métier). Est-ce vrai?
Lors de la soumission du formulaire, si vous avez une erreur dans la date, ModelState.IsValid sera faux et vous obtiendrez une erreur, mais uniquement pour la date car AddRuleViolations n'a jamais été exécuté. Si vous supprimez complètement la vérification de ModelState.IsValid, vous obtiendrez toutes les erreurs (en raison de l'exception), y compris un marquage dans la date lorsqu'elle n'est pas valide. Alors, pourquoi la vérification de ModelState.IsValid y est-elle du tout? Est-ce que je manque quelque chose?
//
// 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);
}
la source
var errors = ModelState.Values.SelectMany(v => v.Errors);
avec un point d'arrêt pour afficher les éventuels problèmes de validation.De l'errata:
ModelState.AddRuleViolations(dinner.GetRuleViolations());
Devrait être:
ModelState.AddModelErrors(dinner.GetRuleViolations());
Référence: http://www.wrox.com/WileyCDA/WroxTitle/Professional-ASP-NET-MVC-1-0.productCd-0470384611,descCd-ERRATA.html
la source
AddModelErrors
méthode n'existe pas.ModelState.AddModelErrors()
méthode existeModelState.AddModelError
méthode non plurielle existe.Oui, Jared et Kelly Orr ont raison. J'utilise le code suivant comme dans l'exception d'édition.
au lieu de
la source
Tous les champs de modèle qui ont des types définis, ceux-ci doivent être validés lorsqu'ils sont renvoyés au Controller. Si l'un des champs de modèle ne correspond pas à leur type défini, ModelState.IsValid retournera false. Parce que, ces erreurs seront ajoutées dans ModelState.
la source