使用System.ComponentModel.DataAnnotations验证字段数据正确性
数据 验证 system 使用 正确性
2023-09-11 14:15:06 时间
在.NET MVC 中,当页面提交model到Action的时候,自动填充ModelState。使用ModelState.IsValid进行方便快捷的数据验证,其验证也是调用命名空间System.ComponentModel.DataAnnotations中的各种方法进行验证。但是使用非MVC架构时,就需要写很多if判断或者正则表达式,当有多个字段需要验证的的时候不知道有多少人和我一样很厌烦这种用if判断的方式。这里记录一个方法,使用System.ComponentModel.DataAnnotations来实现自己的验证model抛出相应的错误信息。
C#文档地址:System.ComponentModel.DataAnnotations
C#文档地址:System.ComponentModel.DataAnnotations
这里我们先实现一个Person类,里面包含几个简单的属性,然后指定几个Attribute
public class Person { [Required(ErrorMessage = "{0} 必须填写")] [DisplayName("姓名")] public string Name { get; set; } [Required(ErrorMessage = "{0} 必须填写")] [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}", ErrorMessage = "邮件格式不正确")] public string Email { get; set; } [Required(ErrorMessage = "{0} 必须填写")] [Range(1, 100, ErrorMessage = "超出范围")] public int Age { get; set; } [Required(ErrorMessage = "{0} 必须填写")] [StringLength(11, MinimumLength = 11, ErrorMessage = "{0}输入长度不正确")] public string Phone { get; set; } [Required(ErrorMessage = "{0} 必须填写")] [Range(typeof(decimal), "1000.00", "2000.99")] public decimal Salary { get; set; } }
然后实现一个ValidatetionHelper静态类,这里主要用到的是Validator.TryValidateObject方法。
public static class ValidatetionHelper { public static ValidResult IsValid(object value) { ValidResult result = new ValidResult(); try { var validationContext = new ValidationContext(value, null, null); var results = new List<ValidationResult>(); var isValid = Validator.TryValidateObject(value, validationContext, results, true); if (!isValid) { result.IsVaild = false; result.ErrorMembers = new List<ErrorMember>(); foreach (var item in results) { result.ErrorMembers.Add(new ErrorMember() { ErrorMessage = item.ErrorMessage, ErrorMemberName = item.MemberNames.FirstOrDefault() }); } } else { result.IsVaild = true; } } catch (Exception ex) { result.IsVaild = false; result.ErrorMembers = new List<ErrorMember>(); result.ErrorMembers.Add(new ErrorMember() { ErrorMessage = ex.Message, ErrorMemberName = "Internal error" }); } return result; } }
其中需要的返回结果类
public class ValidResult { public List<ErrorMember> ErrorMembers { get; set; } public bool IsVaild { get; set; } } public class ErrorMember { public string ErrorMessage { get; set; } public string ErrorMemberName { get; set; } }
实现一个测试代码,这里看到对应验证数据比使用多个if简洁很多,整个代码也十分美观。
static void Main(string[] args) { Person person = new Person(); person.Name = ""; person.Email = "121 212 K"; person.Phone = "2345"; person.Salary = 3000; var result = ValidatetionHelper.IsValid(person); if (!result.IsVaild) { foreach (ErrorMember errorMember in result.ErrorMembers) { Console.WriteLine(errorMember.ErrorMemberName + ":" + errorMember.ErrorMessage); } } Console.Read(); }
通过测试,可以看到得到正确的验证结果。
后续有时间,把DisplayName给显示上去,那就更完美了。
相关文章
- 使用Data Annotations进行手动数据验证
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
- 【FPGA教程案例98】数据处理1——基于FPGA的数据线性插值verilog实现,MATAB辅助验证
- 淘东电商项目(22) -Canal数据同步框架
- NCNN验证YOLOV4模型输入数据归一化系数
- C#【通用类】常见的数据验证(部分使用正则表达式)
- SpringMVC使用@Valid注解进行数据验证
- 《Spring 5 官方文档》5. 验证、数据绑定和类型转换(二)
- DataHub: 现代数据栈的元数据平台--如何快速验证所有组件容器都在正确的运行?
- Docker容器------数据卷和数据卷容器
- SpringMVC数据验证
- 《数据驱动的网络分析》——6.2 R语言基础知识
- 「基于Python技术的智慧中医商业项目」资讯数据&平台业务设计
- Hotel-ID打击人口贩卖(3)生成随机数据验证
- 计算机科学采用训练数据集,验证数据集,测试数据集 的方法 为什么不采用统计学中常用的假设检验呢? (参数检验 和 非参数检验)
- 大数据触角伸向每个传统行业,未来无所不在
- 阿里云发布一站式大数据平台“数加”
- 【UVM实战】第二章:一个简单的UVM验证平台(3)为验证平台加入各个组件【时序解读;使用流操作符解包driver数据的代码;修正原书monitor数据的拼包错误】
- Java //PP2.3 编写一个应用程序,输出提示信息并读入某人的姓名、年龄、所属学院和宠物的名字,然后显示出下述文字,并在其中插入适当的数据: Hello, my name is name...