第十节:数据批注(DataAnnotationModel)和自定义验证(包括Model级别的验证)
2017-12-06 16:17
435 查看
一. 简介
写完上一个章节MVC中的常用特性,迫不及待将该系列补全,该章节主要介绍数据批注(也叫:注解)。
一听【数据批注】,好高大上的名字,但仔细一看,它们其实是【System.ComponentModel.DataAnnotations】程序集下的一些特性类,O(∩_∩)O哈哈~,既然是特性,就符合特性的所有特征,只不过这些特性是作用于“属性”上的。
再一看【System.ComponentModel.DataAnnotations】这个命名空间,有点眼熟,与之前EF中的一篇文章【EF的CodeFirst模式通过DataAnnotations修改默认协定】中的一类操作来源于同一个命名空间下。
所以综上所述:该命名空间下的特性,在EF中可以用来映射生成数据库中的表字段,在日常开发中也可以用于做类中属性的限制和验证。
原理:均继承了ValidationAttribute特性,通过覆写IsValide方法进行校验。
适用场景:很多项目需要客户端和服务器端进行双重格式验证,使之更加安全,这时服务器端就可以使用数据批注了来进行校验了。
以Required特性为例,查看一下源码:
View Code
四. Model级别的验证扩展
实现IValidaableObjec接口,实现Validate方法。(了解即可)
写完上一个章节MVC中的常用特性,迫不及待将该系列补全,该章节主要介绍数据批注(也叫:注解)。
一听【数据批注】,好高大上的名字,但仔细一看,它们其实是【System.ComponentModel.DataAnnotations】程序集下的一些特性类,O(∩_∩)O哈哈~,既然是特性,就符合特性的所有特征,只不过这些特性是作用于“属性”上的。
再一看【System.ComponentModel.DataAnnotations】这个命名空间,有点眼熟,与之前EF中的一篇文章【EF的CodeFirst模式通过DataAnnotations修改默认协定】中的一类操作来源于同一个命名空间下。
所以综上所述:该命名空间下的特性,在EF中可以用来映射生成数据库中的表字段,在日常开发中也可以用于做类中属性的限制和验证。
原理:均继承了ValidationAttribute特性,通过覆写IsValide方法进行校验。
适用场景:很多项目需要客户端和服务器端进行双重格式验证,使之更加安全,这时服务器端就可以使用数据批注了来进行校验了。
以Required特性为例,查看一下源码:
public ActionResult TestDataAnnotationModel(UserInfor user) { //通过该方法进行验证 var isValidate = ModelState.IsValid; if (isValidate) { return Content("ok"); } return Content("error"); }
View Code
四. Model级别的验证扩展
实现IValidaableObjec接口,实现Validate方法。(了解即可)
public class CarInfor: IValidatableObject { public string id { get; set; } public string carName { get; set; } public int carAge { get; set; } IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext) { if (carAge % 2 == 0) { var result = new ValidationResult("车龄验证不通过", new string[] { "carAge" }); yield return result; } } }
相关文章推荐
- 第6章 数据注解 System.ComponentModel.DataAnnotations 、注解后台原理、自定义验证ValidationAttribute、IValidatableObject
- METADATATYPE的使用,MVC的MODEL层数据验证
- asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证
- MVC验证07-自定义Model级别验证
- MetadataType的使用,MVC的Model层数据验证
- MVC数据验证原理及自定义ModelValidatorProvider实现无编译修改验证规则和错误信息
- asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证
- MVC数据验证原理及自定义ModelValidatorProvider实现无编译修改验证规则和错误信息
- MVC验证07-自定义Model级别验证
- 【转】MetadataType的使用,MVC的Model层数据验证
- SilverLight数据输入验证四:Silverlight DataAnnotation常用输入验证总结
- asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证
- MetadataType的使用,MVC的Model层数据验证
- MetadataType的使用,MVC的Model层数据验证
- MVC数据验证原理及自定义ModelValidatorProvider实现无编译修改验证规则和错误信息
- 【转】METADATATYPE的使用,MVC的MODEL层数据验证
- Xqk.Data数据框架使用说明之:如何自定义数据表名
- spring-data-redis使用自定义序列化数据 使用 protobuf
- asp.net mvc3 数据验证(三)—自定义数据注解
- Silverlight实例教程 – Datagrid,Dataform数据验证和ValidationSummary