介绍
数据模型验证采用微软组件System.ComponentModel.DataAnnotations来实现,需要添加System.ComponentModel.DataAnnotations.dll的引用。它通过Attribute来标记验证规则,简单且直观。一个简单的例子如下:
using System;using System.ComponentModel;using System.ComponentModel.DataAnnotations;namespace BusSchClient{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; }}}
说明:
- Required 验证规则,设置字段为必填字段,ErrorMessage表示验证不通过时显示的错误消息
- StringLength 验证规则,设置此字段的最大和最小长度。
- DisplayName 设置字段的友好显示名称,如果不指定默认为字段名称。
使用方法
要使用数据模型验证,需要按照下列步骤:
- 新建数据模型类,在数据模型属性上添加验证规则
Attribute以及错误提示信息。
注意事项:所有验证规则都是以**Attribute**结尾,但是使用时都不需要添加,这是微软的规 范,遵守即可。
- 创建数据模型类实例,并设置各属性的值。
- 调用
XCI.Helper.ValidateHelper类的ValidationAs(验证数据模型)和ValidationPropertyAs(验证数据模型单个属性)方法实现数据验证,并返回XCI.Core.BoolMessage消息对象。
示例
1. 验证整个数据模型
/// <summary>/// 验证模型/// </summary>public void ValidModel(){var model = new Person();BoolMessage result = XCI.Helper.ValidateHelper.ValidationAs(model);if (!result.Success){XCI.Windows.Helper.MessageBoxHelper.ShowError(result.Msg);}}
2. 验证单个属性
/// <summary>/// 验证模型属性/// </summary>public void ValidProperty(){var model = new Person();BoolMessage result = XCI.Helper.ValidateHelper.ValidationPropertyAs(model, nameof(Person.Name));if (!result.Success){XCI.Windows.Helper.MessageBoxHelper.ShowError(result.Msg);}}
系统默认验证规则
| 规则名称 | 规则说明 |
|---|---|
| Required | 值必须非空 |
| StringLength | 字符串长度不能超过给定的最小和最大长度 |
| Range | 值必须在指定的数值范围内,可以指定数据类型数值、日期等类型 |
| Compare | 与指定的属性值进行比较,值是否一致 |
| RegularExpression | 正则表达式匹配,值必须匹配正则表达式,默认大小写敏感 |
框架扩展的验证规则
| 规则名称 | 规则说明 |
|---|---|
| CompareDate | 日期大小比较 |
| Date | 值必须是日期类型 |
| 值必须是电子邮件格式 | |
| EqualTo | 与其他属性比较值内容是否相同 |
| FileExtensions | 属性值的文件扩展名必须是指定的扩展名 |
| Integer | 整数验证 |
| NotEmpty | 不为空验证,支持集合、数组、字符串 |
| Numeric | 数字验证 |
| MobilePhone | 手机号码验证 |
| IdCard | 中国内地15或者18位身份证验证 |
| PlateNumber | 中国内地车牌号码验证,支持新能源汽车 |
| TelPhone | 中国内地座机号码验证 |
| Url | Url格式验证 |
自定义验证规则
自定义验证规则步骤如下:
- 新建验证类,类名以Attribute结尾,并继承自
ValidationAttribute。 - 重写
IsValid方法,返回验证结果。
示例
/// <summary>/// 车牌号码验证/// </summary>[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]public class PlateNumberAttribute : ValidationAttribute{/// <summary>/// 确定指定的值的对象是否有效。/// </summary>/// <param name="value">要验证的对象的值</param>/// <param name="validationContext">验证上下文</param>/// <returns>true 如果指定的值是否有效,则为否则为 false。</returns>protected override ValidationResult IsValid(object value, ValidationContext validationContext){if (value == null) return ValidationResult.Success;var result = ValidateHelper.IsPlateNumber(value.ToStringOrEmpty());return result ? ValidationResult.Success : new ValidationResult(ErrorMessage?? "请输入正确的车牌号码");}}
