打赏

【MVC】ASP.NET MVC之数据验证

前端传到后端数据的不可信任性,DRY("Don't Repeat Yourself") 设计原则。MVC3.0出了后端数据验证特性,鼓励你只定义一次功能或行为,然后在应用程序中各处进行使用。这会大大减少需要编写的代码量,使你的代码不容易出错,更便于测试和维护。

System.ComponentModel.DataAnnotations 命名空间提供定义 ASP.NET MVC 和 ASP.NET 数据控件的类的特性。

AssociationAttribute

指定实体成员表示数据关系(如外键关系)。

CompareAttribute

提供用于比较两个属性的特性。

ConcurrencyCheckAttribute

指定属性参与乐观并发检查。

CreditCardAttribute

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

CustomValidationAttribute

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

DataTypeAttribute

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

DisplayAttribute

提供允许为实体分部类的类型和成员指定可本地化字符串的通用特性。

DisplayColumnAttribute

指定作为外键列显示在被引用表中的列。

DisplayFormatAttribute

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

EditableAttribute

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

EmailAddressAttribute

验证电子邮件地址。

EnumDataTypeAttribute

启用 .NET Framework 枚举,以映射到数据列。

FileExtensionsAttribute

验证文件扩展名。

FilterUIHintAttribute

表示用于指定列的筛选行为的特性。

KeyAttribute

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

MaxLengthAttribute

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

MinLengthAttribute

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

PhoneAttribute

指定数据字段值是格式标准的电话号码。

RangeAttribute

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

RegularExpressionAttribute

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

RequiredAttribute

指定数据字段值是必需的。

ScaffoldColumnAttribute

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

StringLengthAttribute

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

TimestampAttribute

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

UIHintAttribute

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

UrlAttribute

提供 URL 验证。

ValidationAttribute

充当所有验证特性的基类。

ValidationContext

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

ValidationException

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

ValidationResult

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

Validator

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

core微软官方文档

 

Controller层数据验证:

   if (!ModelState.IsValid)
     {
        var errorList = ModelState.Values.Where(t => t.Errors.Count > 0)
              .Select(t
=> t.Errors).ToList(); string errorMessage = "以下字段验证无效:" + "<br/>"; errorList.ForEach(t => { errorMessage += t[0]?.ErrorMessage + "<br/>"; }); return FailureResult(errorMessage); }

 

ViewModel:

    public class TestViewModel
    {
        //Required默认为不允许为空。允许为空则添加AllowEmptyStrings = true
        [Required(AllowEmptyStrings = true)]
        [StringLength(20, ErrorMessage = "密码不能超过20个字符")]
        public string Password { get; set; }

        [Compare("Password", ErrorMessage = "两次输入的密码不一致")]
        public string PasswordConfirm { get; set; }

        [Range(0, 120, ErrorMessage = "年龄取值范围0-120")]
        public int Age { set; get; }

        [RegularExpression(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", ErrorMessage = "邮箱格式不正确")]
        public string Email { get; set; }
        
        [Range(typeof(DateTime), "2000-01-01", "2099-12-31",ErrorMessage = "日期范围{0}-{1}")]
        public DateTime AsOfDate { get; set; }
        
        [Range(typeof(decimal), "0", "100", ErrorMessage = "票息范围{0}-{1}")]
        public decimal CouponRate { get; set; }
        
        [StringLength(10, MinimumLength = 3, ErrorMessage = "最少{0}位,最多{1}位")]
        public string Method { get; set; }

        [DataType(DataType.DateTime)]
        public DateTime Date { get; set; }

        [FileExtensions(Extensions = "jpg,jpeg",ErrorMessage="扩展名必须为{0}")]
        public string FileName { get; set; }

        [CountryName(ErrorMessage="国家必须填写中国")]
        public string Country { get; set; }
    }


    /// <summary>
    /// 自定义验证特性  继承ValidationAttribute
    /// </summary>
    public class CountryNameAttribute : ValidationAttribute
    {
        public override bool IsValid(object value)
        {
            return (string) value == "中国";
        }
    }

 

多语言下的资源文件自定义错误:

<data name="Com0000000080" xml:space="preserve">
<value>总数范围:{1}-{2} !</value>
</data>

posted @ 2018-12-04 18:42  cksun  阅读(1340)  评论(0)    收藏  举报