c# 自定义数据验证

it2025-08-09  10

环境:vs2015,net4.0

 

一、ValidationAttribute

继承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("只能是数值类型"); } }

二、net自带CustomValidation特性

特性参数分别为类名,验证的方法名

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; } }

三、完整实体User

public class User { [MyValidation] public string ID { get; set; } public string NAME { get; set; } [System.ComponentModel.DataAnnotations.CustomValidation(typeof(ValidationExtension), "IsNumber")] public string Age { get; set; } }

四、测试(手动验证)

User user = new User(); user.ID = "ccc"; user.Age = "ccc"; user.NAME = "czj"; //验证实体 { ValidationContext vc = new ValidationContext(user, null, null); ICollection<ValidationResult> results = new List<ValidationResult>(); bool isValid = Validator.TryValidateObject(user, vc, results, true); foreach (var item in results) { Console.WriteLine($"Message:{item.ErrorMessage},Member:{string.Join(",", item.MemberNames)}"); } } //验证实体某属性 { ValidationContext vc = new ValidationContext(user, null, null); vc.MemberName = "Age";//验证指定属性 ICollection<ValidationResult> results = new List<ValidationResult>(); bool isValid = Validator.TryValidateProperty(user.Age, vc, results); foreach (var item in results) { Console.WriteLine($"Message:{item.ErrorMessage},Member:{string.Join(",", item.MemberNames)}"); } }

控制台输出: 

最新回复(0)