Trên ví dụ NerdDinner của Professional ASP.NET MVC 1.0, có một phương pháp để tạo ra một bữa tối mới dưới dạng sao chép dưới đây (trang 89 của phiên bản NerdDinner miễn phí).
Ở đó, nó kiểm tra ModelState.IsValid cho đúng. Nó dường như kiểm tra xem mô hình có hợp lệ cho cơ sở dữ liệu hay không (nghĩa là nó bắt các chuyển đổi loại dữ liệu, như ngày có định dạng không hợp lệ, nhưng không phải là quy tắc kinh doanh). Điều đó có đúng không?
Khi gửi biểu mẫu, nếu bạn gặp lỗi trong ngày, ModelState.IsValid sẽ sai và bạn sẽ nhận lại lỗi, nhưng chỉ cho ngày vì AddRuleViolations chưa bao giờ được thực thi. Nếu bạn xóa hoàn toàn kiểm tra ModelState.IsValid, thì bạn sẽ nhận được tất cả các lỗi (do ngoại lệ), bao gồm cả việc đánh dấu vào ngày khi nó không hợp lệ. Vậy thì, tại sao lại kiểm tra ModelState.IsValid ở đó? Tui bỏ lỡ điều gì vậy?
//
// 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);
}