环境:vs2015,net4.0
继承ValidationAttribute自定义特性,重写IsValid方法
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, Inherited = false, AllowMultiple = false)] public class MyValidationAttribute : ValidationAttribute { public override bool IsValid(object value) { if (value == null) { this.ErrorMessage = "null"; return false; } if (int.TryParse(value.ToString(), out int val)) { return true; } this.ErrorMessage = "只能是数值类型"; return false; } protected override ValidationResult IsValid(object value, ValidationContext validationContext) { if (value == null) { return new ValidationResult("null"); } if (int.TryParse(value.ToString(), out int val)) { return ValidationResult.Success; } return new ValidationResult("只能是数值类型"); } }特性参数分别为类名,验证的方法名
public class User { [System.ComponentModel.DataAnnotations.CustomValidation(typeof(ValidationExtension), "IsNumber")] public string Age { get; set; } }数据验证的方法:
public static class ValidationExtension { public static ValidationResult IsNumber(object input) { var result = new ValidationResult("必须是数字"); if (input == null) return result; if (int.TryParse(input.ToString(), out int val)) { return ValidationResult.Success; } return result; } }控制台输出: