ในตัวอย่างNerdDinnerของProfessional ASP.NET MVC 1.0มีวิธีการสร้างอาหารเย็นใหม่ตามที่คัดลอกต่อไป (หน้า 89 ของรุ่น NerdDinner ฟรี)
มีการตรวจสอบ ModelState.IsValid เป็นจริง ดูเหมือนว่าจะตรวจสอบว่าแบบจำลองนั้นถูกต้องสำหรับฐานข้อมูลหรือไม่ (นั่นคือมันจับการแปลงชนิดข้อมูลเช่นวันที่ด้วยรูปแบบที่ไม่ถูกต้อง แต่ไม่ใช่กฎธุรกิจ) มันเป็นเรื่องจริงเหรอ?
เมื่อส่งแบบฟอร์มหากคุณมีข้อผิดพลาดในวันที่ ModelState.IsValid จะเป็นเท็จและคุณจะได้รับข้อผิดพลาดกลับ แต่เฉพาะสำหรับวันที่เพราะ AddRuleViolations ไม่เคยดำเนินการ หากคุณลบการตรวจสอบ ModelState.IsValid โดยสมบูรณ์คุณจะได้รับข้อผิดพลาดทั้งหมด (เนื่องจากข้อยกเว้น) รวมถึงการทำเครื่องหมายในวันที่ที่ไม่ถูกต้อง จากนั้นทำไมการตรวจสอบ ModelState.IsValid เลยมีอะไรบ้าง ฉันพลาดอะไรไปรึเปล่า?
//
// 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);
}