W przykładzie programu NerdDinner Professional ASP.NET MVC 1.0 istnieje metoda tworzenia nowej kolacji zgodnie z poniższym opisem (strona 89 bezpłatnej wersji NerdDinner).
Tam sprawdza wartość ModelState.IsValid. Wydaje się, że sprawdza, czy model jest prawidłowy dla bazy danych (to znaczy wychwytuje konwersje typów danych, takie jak daty z nieprawidłowym formatem, ale nie reguł biznesowych). Czy to prawda?
Podczas przesyłania formularza, jeśli masz błąd w dacie, ModelState.IsValid będzie fałszywe i otrzymasz błąd, ale tylko dla daty, ponieważ AddRuleViolations nigdy nie zostało wykonane. Jeśli całkowicie usuniesz czek dla ModelState.IsValid, otrzymasz wszystkie błędy (z powodu wyjątku), w tym oznaczenie daty, kiedy jest nieważne. Dlaczego więc w ogóle tam jest sprawdzenie ModelState.IsValid? Czy coś mi brakuje?
//
// 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);
}
źródło
var errors = ModelState.Values.SelectMany(v => v.Errors);
z punktem przerwania, aby wyświetlić wszelkie problemy z walidacją.Z Errata:
ModelState.AddRuleViolations(dinner.GetRuleViolations());
Powinien być:
ModelState.AddModelErrors(dinner.GetRuleViolations());
Źródła: http://www.wrox.com/WileyCDA/WroxTitle/Professional-ASP-NET-MVC-1-0.productCd-0470384611,descCd-ERRATA.html
źródło
AddModelErrors
Metoda nie istnieje.ModelState.AddModelErrors()
Metoda istniejeModelState.AddModelError
. Istnieje metoda nieliczbowa.Tak, Jared i Kelly Orr mają rację. Używam następującego kodu jak w wyjątku edycji.
zamiast
źródło
Wszystkie pola modelu, które mają określone typy, powinny zostać zweryfikowane po zwróceniu do kontrolera. Jeśli którekolwiek z pól modelu nie jest zgodne ze zdefiniowanym typem, wówczas ModelState.IsValid zwróci wartość false. Ponieważ te błędy zostaną dodane w ModelState.
źródło