【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 特性中包含此类时,可使用此类来验证这些项。 |
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>

浙公网安备 33010602011771号