此文只做记录服务器
1 public class MaxWordsAttribute : ValidationAttribute 2 { 3 4 public MaxWordsAttribute(int maxWords) 5 : base("{0} 字符串过长") 6 { 7 _maxWords = maxWords; 8 } 9 private readonly int _maxWords; 10 11 protected override ValidationResult IsValid(object value, ValidationContext validationContext) 12 { 13 if (value != null) 14 { 15 var valueAsString = value.ToString(); 16 if (valueAsString.Split(' ').Length > _maxWords) 17 { 18 var errorMessage = FormatErrorMessage( 19 validationContext.DisplayName); 20 return new ValidationResult(errorMessage); 21 } 22 } 23 return ValidationResult.Success; 24 } 25 }
其实我我的是将数据验证的这些特性分为两类,一类是真正的进行验证,Required,Range,StringLength,Display,Remote,RegularExpression,Compare,Range。这些特性是真正会进行验证的Attribute。另外几个Display,ReadOnly,DataType,DisplayFormat,ScaffoldColumn等和字段的显示有关,没有真正的和服务器端进行验证。框架
咱们可使用MVC提供的各类验证特性,那么咱们是否能够本身来定义自定义特性验证呢。MVC有着巨大的可扩展性,咱们也能够本身进行扩展,有两种扩展方式,一种就是能够重复使用的和MVC框架中验证,只要继承自ValidationAttribute 就能够实现重复使用的验证特性,另外一种就是内包含的模式,它是只验证特定的Model,继承自IValidatableObject能够实现字包含的验证。ide
可重复使用的验证特性,继承自ValidationAttribute。ui