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

}

posted on 2011-03-04 19:16  arg  阅读(680)  评论(0编辑  收藏  举报

导航