您的位置:首页 > 其它

第十节:数据批注(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特性为例,查看一下源码:

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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐