介绍

数据模型验证采用微软组件System.ComponentModel.DataAnnotations来实现,需要添加System.ComponentModel.DataAnnotations.dll的引用。它通过Attribute来标记验证规则,简单且直观。一个简单的例子如下:

  1. using System;
  2. using System.ComponentModel;
  3. using System.ComponentModel.DataAnnotations;
  4. namespace BusSchClient
  5. {
  6. public class Person
  7. {
  8. [Required(ErrorMessage = "{0} 必须填写")]
  9. [DisplayName("姓名")]
  10. public string Name { get; set; }
  11. [Required(ErrorMessage = "{0} 必须填写")]
  12. [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}", ErrorMessage = "邮件格式不正确")]
  13. public string Email { get; set; }
  14. [Required(ErrorMessage = "{0} 必须填写")]
  15. [Range(1, 100, ErrorMessage = "超出范围")]
  16. public int Age { get; set; }
  17. [Required(ErrorMessage = "{0} 必须填写")]
  18. [StringLength(11, MinimumLength = 11, ErrorMessage = "{0}输入长度不正确")]
  19. public string Phone { get; set; }
  20. [Required(ErrorMessage = "{0} 必须填写")]
  21. [Range(typeof(decimal), "1000.00", "2000.99")]
  22. public decimal Salary { get; set; }
  23. }
  24. }

说明:

  • Required 验证规则,设置字段为必填字段,ErrorMessage表示验证不通过时显示的错误消息
  • StringLength 验证规则,设置此字段的最大和最小长度。
  • DisplayName 设置字段的友好显示名称,如果不指定默认为字段名称。

    使用方法

    要使用数据模型验证,需要按照下列步骤:
  1. 新建数据模型类,在数据模型属性上添加验证规则Attribute以及错误提示信息。

注意事项:所有验证规则都是以**Attribute**结尾,但是使用时都不需要添加,这是微软的规 范,遵守即可。

  1. 创建数据模型类实例,并设置各属性的值。
  2. 调用XCI.Helper.ValidateHelper类的ValidationAs(验证数据模型)ValidationPropertyAs(验证数据模型单个属性)方法实现数据验证,并返回XCI.Core.BoolMessage消息对象。

示例

1. 验证整个数据模型

  1. /// <summary>
  2. /// 验证模型
  3. /// </summary>
  4. public void ValidModel()
  5. {
  6. var model = new Person();
  7. BoolMessage result = XCI.Helper.ValidateHelper.ValidationAs(model);
  8. if (!result.Success)
  9. {
  10. XCI.Windows.Helper.MessageBoxHelper.ShowError(result.Msg);
  11. }
  12. }

2. 验证单个属性

  1. /// <summary>
  2. /// 验证模型属性
  3. /// </summary>
  4. public void ValidProperty()
  5. {
  6. var model = new Person();
  7. BoolMessage result = XCI.Helper.ValidateHelper.ValidationPropertyAs(model, nameof(Person.Name));
  8. if (!result.Success)
  9. {
  10. XCI.Windows.Helper.MessageBoxHelper.ShowError(result.Msg);
  11. }
  12. }

系统默认验证规则

规则名称 规则说明
Required 值必须非空
StringLength 字符串长度不能超过给定的最小和最大长度
Range 值必须在指定的数值范围内,可以指定数据类型数值、日期等类型
Compare 与指定的属性值进行比较,值是否一致
RegularExpression 正则表达式匹配,值必须匹配正则表达式,默认大小写敏感

框架扩展的验证规则

规则名称 规则说明
CompareDate 日期大小比较
Date 值必须是日期类型
Email 值必须是电子邮件格式
EqualTo 与其他属性比较值内容是否相同
FileExtensions 属性值的文件扩展名必须是指定的扩展名
Integer 整数验证
NotEmpty 不为空验证,支持集合、数组、字符串
Numeric 数字验证
MobilePhone 手机号码验证
IdCard 中国内地15或者18位身份证验证
PlateNumber 中国内地车牌号码验证,支持新能源汽车
TelPhone 中国内地座机号码验证
Url Url格式验证

自定义验证规则

自定义验证规则步骤如下:

  1. 新建验证类,类名以Attribute结尾,并继承自ValidationAttribute
  2. 重写IsValid方法,返回验证结果。

示例

  1. /// <summary>
  2. /// 车牌号码验证
  3. /// </summary>
  4. [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
  5. public class PlateNumberAttribute : ValidationAttribute
  6. {
  7. /// <summary>
  8. /// 确定指定的值的对象是否有效。
  9. /// </summary>
  10. /// <param name="value">要验证的对象的值</param>
  11. /// <param name="validationContext">验证上下文</param>
  12. /// <returns>true 如果指定的值是否有效,则为否则为 false。</returns>
  13. protected override ValidationResult IsValid(object value, ValidationContext validationContext)
  14. {
  15. if (value == null) return ValidationResult.Success;
  16. var result = ValidateHelper.IsPlateNumber(value.ToStringOrEmpty());
  17. return result ? ValidationResult.Success : new ValidationResult(ErrorMessage?? "请输入正确的车牌号码");
  18. }
  19. }