MVC 验证和异常处理 自动验证使用 IDataErrorInfo 接口
除了DataAnnotationsModelValidationFactory,还有DataErrorInfoModelValidatorProvider。DataErrorInfoModelValidatorProvider提供另一种自定义数据合法性验证支持。Asp.net mvc硬编码支持IDataErrorInfo接口。使用方法为model实现IDataErrorInfo。IDataErrorInfo要求实现返回model级别和属性级别违法信息。
示例:
public class Appointment : IDataErrorInfo
{
public string ClientName { get; set; }
public DateTime AppointmentDate { get; set; }
public string this[string columnName]
{
get {
if (columnName == "ClientName") {
if (string.IsNullOrEmpty(ClientName))
return "Please enter a name.";
}
if (columnName == "AppointmentDate")
{
if (AppointmentDate < DateTime.Now.Date)
return "Bookings cannot be placed in the past";
}
return null; // No property-level errors
}
}
public string Error
{
get {
if (ClientName == "Steve"
&& AppointmentDate.DayOfWeek == DayOfWeek.Saturday)
return "Steve can't book on Saturdays.";
return null; // No object-level errors
}
}
}
public ActionResult MakeBooking(Appointment appt, bool acceptsTerms)
{
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
}