类字段属性自动验证
1.验证特性定义
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)] public class CountryAttribute : ValidationAttribute { public string AllowCountry { get; set; } /// <summary> /// 验证数据是否合法 /// </summary> /// <param name="value"></param> /// <returns></returns> public override bool IsValid(object value) { return string.Equals(value, AllowCountry); } /// <summary> /// 验证结果 /// </summary> /// <param name="value"></param> /// <param name="validationContext"></param> /// <returns></returns> protected override ValidationResult IsValid(object value, ValidationContext validationContext) { if (string.Equals(value, AllowCountry)) return ValidationResult.Success; else return new ValidationResult(string.Format("{0}-{1}-{2} 字段非法", validationContext.DisplayName, validationContext.MemberName, ErrorMessage), new[] { validationContext.MemberName }); } }//end
2.类属性定义
public class test { /// <summary> /// 姓名1 /// </summary> [CountryAttribute(AllowCountry = "fhc", ErrorMessage = "自定义错误1"), Display(Name = "姓名")] public string name { set; get; } [CountryAttribute(AllowCountry = "fhc2", ErrorMessage = "自定义错误2"), Display(Name = "姓名2")] public string name2 { set; get; } [Range(10, 70, ErrorMessage = "自定义错误")] public int age { set; get; } }//end
3.验证结果方法
/// <summary> /// 错误列表 /// </summary> /// <param name="o"></param> /// <returns></returns> public List<string> ErrorList(object o) { List<string> list = new List<string>(); var context = new ValidationContext(o, null, null); var results = new List<ValidationResult>(); Validator.TryValidateObject(o, context, results, true); foreach (var validationResult in results) { list.Add(validationResult.ErrorMessage); } return list; }
4.实际使用
test t = new test() { age = 0, name = "fan" }; List<string> list = ErrorList(t);
如果list长度为0则表示没有错误,否则则是错误列表。
欢迎指正:haizi2014@qq.com
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· [翻译] 为什么 Tracebit 用 C# 开发
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· 刚刚!百度搜索“换脑”引爆AI圈,正式接入DeepSeek R1满血版