不管是通过action参数获取一个model,或者是手工calling UpdateModel()还是TryUpdateModel(),默认的DefaultModelBinder都将自动执行合法验证。但是,你用其他的方法更新model时,自动验证则会跳过。例如:
public ActionResult MakeBooking(string clientName, DateTime? appointmentDate,
bool acceptsTerms)
{
var appt = new Appointment {
ClientName = clientName,
AppointmentDate = appointmentDate.GetValueOrDefault()
};
if (!acceptsTerms)
ModelState.AddModelError("acceptsTerms", "You must accept the terms");
if (ModelState.IsValid) {
// To do: Actually save the appointment to the database or whatever
//绕过验证
return View("Completed", appt);
}
else
return View(); // Re-renders the same view so the user can fix the errors
}
Controller基类提供了两个基本方法让我们手工触发验证
• ValidateModel() 验证,如果不合法,将登记错误,并抛出 InvalidOperationException异常
.
• TryValidateModel() 相对ValidateModel区别在于不抛出异常,只是返回和ModeState.IsValide一样的值。