No exemplo do NerdDinner do Professional ASP.NET MVC 1.0, existe um método para criar um novo jantar como copiado abaixo (página 89 da versão gratuita do NerdDinner).
Lá, verifica ModelState.IsValid como true. Parece verificar se o modelo é válido para o banco de dados (ou seja, ele captura conversões de tipo de dados, como datas com formato inválido, mas não regras de negócios). Isso é verdade?
Ao enviar o formulário, se houver um erro na data, ModelState.IsValid será falso e você receberá um erro novamente, mas somente para a data porque AddRuleViolations nunca foi executado. Se você remover completamente a verificação de ModelState.IsValid, receberá todos os erros (devido à exceção), incluindo uma marcação na data em que ela é inválida. Então, por que a verificação de ModelState.IsValid está presente? Estou esquecendo de algo?
//
// 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);
}