前端传到后端数据的不可信任性,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 > )
              .Select(t => t.Errors).ToList();
string errorMessage = "以下字段验证无效:" + "<br/>";
errorList.ForEach(t => { errorMessage += t[]?.ErrorMessage + "<br/>"; }); return FailureResult(errorMessage);
}

ViewModel:

    public class TestViewModel
{
//Required默认为不允许为空。允许为空则添加AllowEmptyStrings = true
[Required(AllowEmptyStrings = true)]
[StringLength(, ErrorMessage = "密码不能超过20个字符")]
public string Password { get; set; } [Compare("Password", ErrorMessage = "两次输入的密码不一致")]
public string PasswordConfirm { get; set; } [Range(, , 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), "", "", ErrorMessage = "票息范围{0}-{1}")]
public decimal CouponRate { get; set; } [StringLength(, MinimumLength = , 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>

【MVC】ASP.NET MVC之数据验证的更多相关文章

  1. asp.net mvc3 的数据验证(一)

    原文:asp.net mvc3 的数据验证(一)      对于web开发人员来说,对用户输入的信息进行验证是一个重要但是繁琐的工作,而且很多开发者都会忽略.asp.net mvc3框架使用的是叫做“ ...

  2. [Asp.net mvc]Asp.net mvc 中使用LocalStorage

    目前使用比较多的本地存储方案有比如Flash SharedObject.Google Gears.Cookie.LocalStorage.User Data.Open Database等方案.综合比较 ...

  3. MVC ASP.NET MVC各个版本的区别

    ASP.NET MVC各个版本的区别 Net Framework4.5是不支持安装在window server 2003上,如非装请用net framework4.0; MVC1.0 publsh t ...

  4. [Asp.net mvc]Asp.net mvc 使用Json传递数据

    在之前的练习中一直是直接传递的Model到后台或是单个数据到后台,今天在使用中遇到了点问题,不能使用Model传递到后台,但又要实现多个数据到后台,实验了多次有了以下的解决方案,给自己留个笔记. 功能 ...

  5. c# MVC模式学习笔记_数据验证

    改变显示字段名称 设计字段规范 1.引用 using System.ComponentModel; using System.ComponentModel.DataAnnotations; 2.Dis ...

  6. [Asp.net mvc] Asp.net mvc Kendo UI Grid的使用(四)

    有段时间没写博客了,工作状态比较忙,抽空继续总结下Grid的使用,这次主要介绍模板以及其他官网介绍不详尽的使用方法.先Show出数据,然后讲解下.后台代码: public ActionResult O ...

  7. ASP.NET Web API 数据验证

    第一种方式单独为每一个Action做验证 // POST api/values public HttpResponseMessage Post([FromBody]UserInfo userInfo) ...

  8. 在ASP.NET 中有哪些数据验证控件(请解释ASP.NET中以什么方式进行数据验证)?

    (1)RequiredFieldValidator:检查用户是否输入: (2)CompareValidator:检查两个表单输入项的输入信息是否存在某种指定关系,比如大.等于等: (3)RangeVa ...

  9. MVC ASP.NET MVC各个版本的区别 (转)

    Net Framework4.5是不支持安装在window server 2003上,如非装请用net framework4.0; MVC1.0 publsh time:2008 IDEV:VS200 ...

  10. <转>ASP.NET学习笔记之MVC 3 数据验证 Model Validation 详解

    MVC 3 数据验证 Model Validation 详解  再附加一些比较好的验证详解:(以下均为引用) 1.asp.net mvc3 的数据验证(一) - zhangkai2237 - 博客园 ...

随机推荐

  1. linux运维需要掌握什么知识?linux运维学习路线

    linux运维需要掌握什么知识?这个问题算是老生常谈了,但是本人认为知道需要掌握什么知识不是重点,重点是我们需要知道运维是做什么的?再来根据工作需求去讨论需要学习什么知识才是正途,须知知识是学不完的, ...

  2. hadoop集群的规划和搭建

    1.操作系统版本:CentOS 6 CM版本:CM5.x CDH版本:CDH5.x 2.安装操作系统,对系统盘做 RAID1: 配置静态IP.hostname信息:vim /etc/sysconfig ...

  3. 北京大学Cousera学习笔记--6-计算导论与C语言基础--计算机的基本原理-认识程序设计语言 如何学习

    1.是一门高级程序语言 低级语言-机器语言(二进制) 汇编语言-load add save mult 高级语言:有利于人们编写理解 2.C语言的规范定义非常的宽泛 1.long型数据长度不短于int型 ...

  4. rinetd 通过公网连接云数据库

    在很多云服务中,经常会遇到云存储数据库没有公网(外网)地址,只有内网地址,这导致在公司网无法访问,这是一个很困扰的问题,这时我们可以使用rinetd进行转发实现外网连接. 首先需要一台能够连接上数据库 ...

  5. java多线程探究

    本文主要是一些线程理论性的知识,随后将贴出研究的源码,包含线程池,锁,线程组等简单的demo,欢迎大家下载1.进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程 ...

  6. Redis批量导入数据的方法

    有时候,我们需要给redis库中插入大量的数据,如做性能测试前的准备数据.遇到这种情况时,偶尔可能也会懵逼一下,这里就给大家介绍一个批量导入数据的方法. 先准备一个redis protocol的文件( ...

  7. 关于element组件中分页的一些个人思路

    最近在用element,用到了它的分页这个组件,我这边的情况是,我前端请求数据,数据大概有20个的样子,把数据存在data的一个数组里面,用一个v-for循环遍历数组内容,并用div装起来,这样20个 ...

  8. Xamarin.Forms踩坑集锦(持续更新)

    1.ImageButton控件 问题:ImageButton在切换图片的时候,图片大小会改变. Github Issue:ImageButton changes image size · Issue ...

  9. spring源码解析2--容器的基本实现

    spring的主要特性是IOC,实现IOC的关键是bean,而更关键的是如何bean的管理容器,也就是BeanFactory,本文的目标是弄清楚BeanFactory具体是怎么样的存在. 先看下最简单 ...

  10. Python 较为完善的猜数字游戏

    import random def guess_bot(): bot = random.randint(1, 100) # time = int(input("你觉得能猜对需要的次数:&qu ...