一、能够使用Model的Attribute进行服务端数据验证

本文目录

一、概述

二、MVC提供的常用上下文

三、自定义正则表达式验证

一、概述

为了确保数据的安全性,由Client发送到服务端的每一项数据我们都会做严格的数据校验。MVC做数据校验一般都会写在Model的Attribute上,代码看起来更加优雅、简洁。在下面的介绍中我们对校验进行了归类,一种是MVC框架里提供的默认校验方式、另一种通过继承来实现自定义规则。

二、MVC提供的常用上下文

1.Model中的代码

 1 using System.ComponentModel.DataAnnotations;
2
3 namespace MVC3.Demo.Models
4 {
5 public class ValidationModel
6 {
7 [Display(Name = "特殊数字")]
8 [Required(ErrorMessage = "请输入{0}")]
9 [StringLength(20, ErrorMessage = "{0}在{2}位至{1}位之间", MinimumLength = 1)]
10 public string InputNumber { get; set; }
11 }
12 }

[Display(Name = "特殊数字")]:视图如显示的名称,具体看运行效果。

[Required(ErrorMessage = "请输入{0}")]:InputNumber是必须填写的,如果不填写ErrorMessage属性的值将以显示在页面上。{0}为Display中Name属性的占位符。

[StringLength(20, ErrorMessage = "{0}在{2}位至{1}位之间", MinimumLength = 1)]:字符串长度为:1-20之间。{0}、{1}、{2}分别为参数的占位符。

2.View中的代码

 1 @model MVC3.Demo.Models.ValidationModel
2 @{
3 Layout = null;
4 }
5 <!DOCTYPE html>
6 <html>
7 <head>
8 <title>ModelValidation</title>
9 </head>
10 <body>
11 <div>
12 @using (Html.BeginForm())
13 {
14 <div>
15 @Html.LabelFor(model => model.InputNumber)
16 @Html.TextBoxFor(model => model.InputNumber)
17 @Html.ValidationMessageFor(model => model.InputNumber)
18 </div>
19 <div>
20 <input type="submit" value="提交" />
21 </div>
22 }
23 </div>
24 </body>
25 </html>

@Html.LabelFor(model => model.InputNumber):显示Model中的DisplayAttribute的Name属性

@Html.ValidationMessageFor(model => model.InputNumber):显示错误信息的HtmlHelper

3.Control中的代码

 1         public ActionResult ModelValidation()
2 {
3 return View();
4 }
5
6 [HttpPost]
7 public ActionResult Validation(Models.ValidationModel model)
8 {
9 if (ModelState.IsValid)
10 {
11 var inputNumber = model.InputNumber;
12 }
13 return View();
14 }

ModelState.IsValid:校验客户端数据是否全部符合验证规则

4.运行效果

5.其他验证

详细请查阅MSDN:http://msdn.microsoft.com/zh-cn/library/cc490428(v=vs.95).aspx

三、自定义正则表达式验证

1.常规方式

1 using System.ComponentModel.DataAnnotations;
2
3 public class ValidationModel
4 {
5 [RegularExpression(@"^[0-5]*$", ErrorMessage = "只能输入0-5间的数字")]
6 public string InputNumber { get; set; }
7 }

[RegularExpression(@"^[0-5]*$", ErrorMessage = "只能输入0-5间的数字")]:第一个参数为要验证的正责表达式,第二个参数为错误消息。

如果有多个Model中的属性都要使用这个正责表达式,那么“常规方式”显得代码大量的冗余

2.继承方式

用一个类去继承RegularExpressionAttribute,从而达到封装正责表达式和错误消息作用,类代码如下:

 1 using System;
2 using System.ComponentModel.DataAnnotations;
3
4 namespace MVC3.Demo.App_Code
5 {
6 public class SpecialValidation : RegularExpressionAttribute
7 {
8 public SpecialValidation() : base(@"^[0-5]*$") { }
9
10 public override string FormatErrorMessage(string name)
11 {
12 return String.Format("{0}在0-5之间", name);
13 }
14 }
15 }

使用代码如下:

 1 using System.ComponentModel.DataAnnotations;
2 using MVC3.Demo.App_Code;
3
4 namespace MVC3.Demo.Models
5 {
6 public class ValidationModel
7 {
8 [SpecialValidation]
9 public string InputNumber { get; set; }
10 }
11 }

上面的代码效果等同于:[RegularExpression(@"^[0-5]*$", ErrorMessage = "{0}只能输入0-5间的数字")]

3.运行效果

此文摘录于 李林峰博客 作为笔记使用。

http://www.cnblogs.com/iamlilinfeng

Model中的验证规则的更多相关文章

  1. [Asp.net MVC]Asp.net MVC5系列——在模型中添加验证规则

    目录 概述 在模型中添加验证规则 自定义验证规则 伙伴类的使用 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5 ...

  2. ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则

    原文:ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则 对于Model验证,理想的设计应该是场景驱动的,而不是Model(类型)驱动的,也就是对于同一个Model对象, ...

  3. yii2中自定义验证规则rules

    作者:白狼 出处:www.manks.top/article/yii2_custom_rules 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追 ...

  4. Yii CModel中rules验证规则[转]

    array( array(‘username’, ‘required’), array(‘username’, ‘length’, ‘min’=>3, ‘max’=>12), array( ...

  5. Yii CModel中rules验证规则

    array( array(‘username’, ‘required’), array(‘username’, ‘length’, ‘min’=>3, ‘max’=>12), array( ...

  6. Yii2中rules验证规则

    required : 必须值验证属性 [['字段名'],required,'requiredValue'=>'必填值','message'=>'提示信息']; #说明:CRequiredV ...

  7. js正则基础总结和工作中常用验证规则

    知识是需要系统的.就像js正则用了那么多次,却还是浑浑噩噩,迫切需要来一次整理,那么来吧! 基本知识 元字符 \d 匹配数字等于[0-9] \w 匹配字母.数字.下划线.中文 \s 匹配任意空白字符 ...

  8. MVVM中数据验证之 ViewModel vs. Model

                                                      MMVM模式示意图. View绑定到ViewModel,然后执行一些命令在向它请求一个动作.而反过来 ...

  9. MVC数据验证原理及自定义ModelValidatorProvider实现无编译修改验证规则和错误信息

    Asp.net MVC中的提供非常简单易用的数据验证解决方案. 通过System.ComponentModel.DataAnnotations提供的很多的验证规则(Required, StringLe ...

随机推荐

  1. HihoCoder1652 : 三角形面积和2([Offer收割]编程练习赛38)(几何)(不会几何,占位)

    描述 如下图所示,在X轴上方一共有N个三角形.这些三角形的底边与X轴重合,底边上两个顶点的坐标分别是(Li, 0)和(Ri, 0),底边的对顶点坐标是(Xi, Yi).其中Li ≤ Xi ≤ Ri 且 ...

  2. c# namespace不能和class的name 相同

    比如namespace A, 内部Class A, 那么调用class A的方法只能通过A.A.XXX来访问. 或者说实例化一个class A,  A a = new A(); // compile ...

  3. about future

    最近又又又重复看了 star trek 星际迷航 back to the future 1/2/3 开始想象未来是什么样子的 1. 未来的开发语言 1.1[rust] or [golang] or [ ...

  4. leetcode Word Break-单词划分

    题目描述: 给定一个字符串s和一组单词,确定这个字符串是否能够进行这样一种划分,划分后所有的子字符串均来自给定的单词组.例如s = “leetcode” ,dict = {“leet”,“code”} ...

  5. 在Windows环境中学习Linux

    如何在Windows环境下学习Linux?方法如下: 方法一: 下载Cygwin,Cygwin是一个在windows平台上运行的类UNIX模拟环境,网上有很多安装教程,这里不多说. 方法二: 下载一个 ...

  6. C#设计模式(5)——建造者模式

    一.概念 建造者模式将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示. 二.模型 三.代码实现 /// <summary> /// 建造者模式的演变 /// 省略了指挥 ...

  7. 使用superobject 解析Json数据

    接口数据有如下规范{"error": 0, "msg": "", "data": ...} 其中数据data类型不确定. ...

  8. java.lang.NoClassDefFoundError: org/springframework/dao/support/DaoSupport

    转自:https://blog.csdn.net/lzx159951/article/details/79753493 1. 缺少:org.springframework.transaction-3. ...

  9. 牛客多校3 A-PACM Team(状压降维+路径背包)

    PACM Team 链接:https://www.nowcoder.com/acm/contest/141/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144 ...

  10. MYSQL数据库设计规范11111

    MYSQL数据库设计规范       1.数据库命名规范         采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成;         命名简洁明确(长度不能超 ...