Açık NerdDinner örneğinde Profesyonel ASP.NET MVC 1.0 kopyalanan körük (serbest NerdDinner versiyonunun sayfa 89) gibi yeni bir akşam yemeği oluşturmak için bir yöntem var.
Orada ModelState.IsValid'i doğru olarak kontrol eder. Modelin veritabanı için geçerli olup olmadığını kontrol ediyor gibi görünüyor (yani, geçersiz biçime sahip tarihler gibi, ancak iş kurallarına sahip olmayan tarihler gibi veri türü dönüşümlerini yakalıyor). Bu doğru mu?
Formu gönderirken, tarihte bir hata varsa, ModelState.IsValid yanlış olur ve bir hata alırsınız, ancak yalnızca tarih için AddRuleViolations hiçbir zaman yürütülemedi. ModelState.IsValid kontrolünü tamamen kaldırırsanız, geçersiz olduğu tarihteki bir işaret de dahil olmak üzere tüm hataları (istisna nedeniyle) alırsınız. Öyleyse, ModelState.IsValid kontrolü neden orada? Bir şey mi kaçırıyorum?
//
// 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);
}