欢迎来到Will的博客

在非ASP.NET项目里使用Data Annotations验证Model

C# will 383℃ 0评论

简介

Data Annotations是在Asp.Net中用于表单验证的,它通过Attribute直接标记字段的有效性,简单且直观。在非Asp.Net程序中(如控制台程序),我们也可以使用Data Annotations进行手动数据验证的,如下:

验证步骤

1.首先需要引用System.ComponentModel.DataAnnotations.dll

2.在Model中加入验证特性,如Required等

public class SmsModel
{
    /// 
    /// 手机号
    /// 
    [Required(ErrorMessage = "手机号不能为空")]
    [RegularExpression(@"^(13[0-9]|15[0-9]|17[0-9]|18[0-9]|14[57])\d{8}$", ErrorMessage = "手机号不正确")]
    public string MobileNo { get; set; }

    /// 
    /// 短信内容
    /// 
    [Required(ErrorMessage = "短信内容不能为空")]
    public string Content { get; set; }
}

3.初始化上下文,并验证

public static bool ModelValidate(SmsSendModel model)
{
    var vc = new ValidationContext(model, null, null);
    var errors = new List();  //会返回所有验证不通过的字段及错误信息
    // Validator.ValidateObject(model,vc,true);  //如果不通过会发生异常
    return Validator.TryValidateObject(model, vc, errors, true); //会将不通过的返回给errors对象
}

4. 如果系统定义的验证特性无法满足的话,可以自定义验证,只需要继承ValidationAttribute类即可,如下

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
    public class CountryAttribute : ValidationAttribute
    {
        public string AllowCountry { get; set; }

        public override bool IsValid(object value)
        {
            return string.Equals(value, AllowCountry);
        }

        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            if (string.Equals(value, AllowCountry))
                return ValidationResult.Success;
            else
                return new ValidationResult(string.Format("{0} 字段非法", validationContext.DisplayName), new []{ validationContext.MemberName});
        }
    }

从上我们可以看到,IsValid是有两个版本的,我们实际上只需要重载一个即可,如果需要自定义错误信息可以用下面那个。 如果两个版本都重载了默认情况下使用下面的那个高级的版本。

附注(和Data Annotations相关的类)

说明
 AssociatedMetadataTypeTypeDescriptionProvider

通过添加在关联类中定义的特性和属性信息,从而扩展某个类的元数据信息。

 AssociationAttribute

指定某个实体成员表示某种数据关系,如外键关系。

 BindableTypeAttribute

指定类型是否通常用于绑定。

 CompareAttribute

提供比较两个属性的属性。

 ConcurrencyCheckAttribute

指定某属性将参与开放式并发检查。

 CreditCardAttribute

指定数据字段值是信用卡号码。

 CustomValidationAttribute

指定自定义的验证方法来验证属性或类的实例。

 DataTypeAttribute

指定要与数据字段关联的附加类型的名称。

 DisplayAttribute

提供一个通用特性,使您可以为实体分部类的类型和成员指定可本地化的字符串。

 DisplayColumnAttribute

将所引用的表中显示的列指定为外键列。

 DisplayFormatAttribute

指定 ASP.NET 动态数据如何显示数据字段以及如何设置数据字段的格式。

 EditableAttribute

指示数据字段是否可编辑。

 EmailAddressAttribute

确认一电子邮件地址。

 EnumDataTypeAttribute

使 .NET Framework 枚举能够映射到数据列。

 FileExtensionsAttribute

文件扩展名验证

 FilterUIHintAttribute

表示一个特性,该特性用于指定列的筛选行为。

 KeyAttribute

表示一个或多个用于唯一标识实体的属性。

 MaxLengthAttribute

指定属性中允许的数组或字符串数据的最大长度。

 MetadataTypeAttribute

指定要与数据模型类关联的元数据类。

 MinLengthAttribute

指定属性中允许的数组或字符串数据的最小长度。

 PhoneAttribute

使用电话号码的正则表达式,指定数据字段值是一个格式正确的电话号码。

 RangeAttribute

指定数据字段值的数值范围约束。

 RegularExpressionAttribute

指定 ASP.NET 动态数据中的数据字段值必须与指定的正则表达式匹配。

 RequiredAttribute

指定需要数据字段值。

 ScaffoldColumnAttribute

指定类或数据列是否使用基架。

 ScaffoldTableAttribute

指定类或数据表是否使用基架。

 StringLengthAttribute

指定数据字段中允许的最小和最大字符长度。

 TimestampAttribute

将列的数据类型指定为行版本。

 UIHintAttribute

指定动态数据用来显示数据字段的模板或用户控件。

 UrlAttribute

提供 URL 验证。

 ValidationAttribute

作为所有验证属性的基类。

 ValidationContext

描述执行验证检查的上下文。

 ValidationException

表示在使用 ValidationAttribute 类的情况下验证数据字段时发生的异常。

 ValidationResult

表示验证请求结果的容器。

 Validator

定义一个帮助器类,在与对象、属性和方法关联的 ValidationAttribute 特性中包含此类时,可使用此类来验证这些项。

转载请注明:Will的博客 » 在非ASP.NET项目里使用Data Annotations验证Model

喜欢 (1)or分享 (0)
  1. 快期末了,大家一起跟我唱:“我家住在黄土高坡,大风从坡上刮过,不管是李宇春还是曾轶可,都是我滴哥我滴哥……我家住在黄土高坡,日头从坡上走过,不管是拜春哥,还是拜曾哥,保佑我及格,不挂科!”