此文只做記錄服務器
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