【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 > )
.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之数据验证的更多相关文章
- asp.net mvc3 的数据验证(一)
原文:asp.net mvc3 的数据验证(一) 对于web开发人员来说,对用户输入的信息进行验证是一个重要但是繁琐的工作,而且很多开发者都会忽略.asp.net mvc3框架使用的是叫做“ ...
- [Asp.net mvc]Asp.net mvc 中使用LocalStorage
目前使用比较多的本地存储方案有比如Flash SharedObject.Google Gears.Cookie.LocalStorage.User Data.Open Database等方案.综合比较 ...
- MVC ASP.NET MVC各个版本的区别
ASP.NET MVC各个版本的区别 Net Framework4.5是不支持安装在window server 2003上,如非装请用net framework4.0; MVC1.0 publsh t ...
- [Asp.net mvc]Asp.net mvc 使用Json传递数据
在之前的练习中一直是直接传递的Model到后台或是单个数据到后台,今天在使用中遇到了点问题,不能使用Model传递到后台,但又要实现多个数据到后台,实验了多次有了以下的解决方案,给自己留个笔记. 功能 ...
- c# MVC模式学习笔记_数据验证
改变显示字段名称 设计字段规范 1.引用 using System.ComponentModel; using System.ComponentModel.DataAnnotations; 2.Dis ...
- [Asp.net mvc] Asp.net mvc Kendo UI Grid的使用(四)
有段时间没写博客了,工作状态比较忙,抽空继续总结下Grid的使用,这次主要介绍模板以及其他官网介绍不详尽的使用方法.先Show出数据,然后讲解下.后台代码: public ActionResult O ...
- ASP.NET Web API 数据验证
第一种方式单独为每一个Action做验证 // POST api/values public HttpResponseMessage Post([FromBody]UserInfo userInfo) ...
- 在ASP.NET 中有哪些数据验证控件(请解释ASP.NET中以什么方式进行数据验证)?
(1)RequiredFieldValidator:检查用户是否输入: (2)CompareValidator:检查两个表单输入项的输入信息是否存在某种指定关系,比如大.等于等: (3)RangeVa ...
- MVC ASP.NET MVC各个版本的区别 (转)
Net Framework4.5是不支持安装在window server 2003上,如非装请用net framework4.0; MVC1.0 publsh time:2008 IDEV:VS200 ...
- <转>ASP.NET学习笔记之MVC 3 数据验证 Model Validation 详解
MVC 3 数据验证 Model Validation 详解 再附加一些比较好的验证详解:(以下均为引用) 1.asp.net mvc3 的数据验证(一) - zhangkai2237 - 博客园 ...
随机推荐
- python发送邮件心得体会
利用本地smtp server发送 windows下尝试装了两个smtp server大概配置了下,发现没法生效,也没时间仔细研究了.装上foxmail发现以前可以本地发送的选项已经无法找到. 不带附 ...
- Promise (2) 原型上的方法
"I'm Captain Jack Sparrow" 加勒比海盗5上映,为了表示对杰克船长的喜爱,昨天闪现了几次模仿船长的走路姿势(哈哈哈,简直妖娆). 为了周天能去看电影,要赶紧 ...
- egg.js异步请求数据
之前已经简单的使用egg-init初始化项目,并创建控制器controller和服务service 在实际项目中, service主要负责数据的请求,并处理(http请求) controll主要负责获 ...
- [PHP] 解决人人商城收银台不能上传图片问题
反正网上一大堆,也不知道哪个版本有修复,反正我的没有修复. 问题报错:ReferenceError: angular is not defined 解决如下: 修改文件:addons/ewei_sho ...
- JD-GUI反编译出现ERROR
反编译Jar包一般使用JD-GUI工具,很方便.但有时会出现异常,如下: 此时,可以辅助使用另一个工具来反编译代码:Luyten(https://github.com/deathmarine/Luyt ...
- C#中的委托(delegate)(个人整理)
Delegate 一.什么是委托? 委托是一种引用类型,它是函数指针的托管版本.在C#中,委托是一种可以把引用存储为函数的类型.委托可以引用实例和静态方法,而函数指针只能引用静态方法.委托的声明非常类 ...
- vue开发目录
基于 vue-cli 脚手架生成项目模板基础上做了些改动,加入了 vue-router ,vuex 等配套设施,本地 dev server 中加入了接口 mock 功能,还增加一个 build ser ...
- nginx ../logs/nginx.pid" failed (2: No such file or directory)
[1]nginx.pid相关 (1)可能出现两种场景: 1.1 nginx.pid文件不存在 发生现象:nginx: [error] open() "/usr/local/lib/ubcsr ...
- TTL与非门电路的工作原理
分立元件门电路虽然结构简单,但是存在着体积大.工作可靠性差.工作速度慢等许多缺点.1961年美国德克萨斯仪器公司率先将数字电路的元器件和连线制作在同一硅片上,制成了集成电路.由于集成电路体积小.质量轻 ...
- 基于PLC1850平台的ARP包请求与响应
一.以太网ARP报文格式 ①.以太网目的地址:占6个字节(接收方的MAC地址,不清楚时发广播地址:FF-FF-FF-FF-FF-FF) ②.以太网源地址:占6个字节(发送方的MAC地址) ③.帧类型: ...