首页 > 代码库 > 8.1 自定义验证属性

8.1 自定义验证属性

      前面讲的都是预先设定的数据注解,但是系统自由的数据注解肯定不适合所有的场合,所以有时候我们需要自定义数据注解。自定义数据注解有两种,一种是直接写在模型对象中,这样做的好处是验证时只需要关心一种模型对象的验证逻辑,缺点也是显而易见的,那就是不能重用。还有一种是封装在自定义的数据注解中,创建自己的Data Annotations Validation Attribute,优点是可重用,缺点是需要应对不同类型的模型。

      现在我们以封装在自定义数据注解中的方法为例看下如何在asp.net mvc3中自定义数据注解以及使用。首先,所有的数据注解都应继承于System.ComponentModel.DataAnnotations命名空间中的ValidationAttribute类。重写其protected virtual ValidationResult IsValid(object value, ValidationContext validationContext);
public class ValidEmailAddressAttribute : ValidationAttribute 
{ 
    public ValidEmailAddressAttribute() 
    { 
        // Default message unless declared on the attribute 
        ErrorMessage = "{0} must be a valid email address."; 
    } 

    public override bool IsValid(object value) 
    { 
        // You might want to enhance this logic... 
        string stringValue = http://www.mamicode.com/value as string; 
        if (stringValue != null) 
            return stringValue.Contains("@"); 
        return true; 
    } 
}

public class Appointment 
{ 
    [Required(ErrorMessage = "Please enter your name")] 
[StringLength(50)] public string ClientName { get; set; } [DataType(DataType.Date)]
[Required(ErrorMessage = "Please choose a date")] public DateTime AppointmentDate { get; set; } [ValidEmailAddress] public String Email { get; set; } }

8.1 自定义验证属性