一、能够使用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. Swift范性

    关于泛型 「泛型」(Generic Code)也许是Swift相对于OC的最大特性之一吧!基于Swift的「泛型」特性,你能够写出扩展性更强.复用性更强的方法.类型,它可以让你尽可能避免重复代码,用一 ...

  2. 浏览器,tab页显示隐藏的事件监听--页面可见性

    //监听浏览器tab切换,以便在tab切换之后,页面隐藏的时候,把弹幕停止 document.addEventListener('webkitvisibilitychange', function() ...

  3. poj 3415 Common Substrings —— 后缀数组+单调栈

    题目:http://poj.org/problem?id=3415 先用后缀数组处理出 ht[i]: 用单调栈维护当前位置 ht[i] 对之前的 ht[j] 取 min 的结果,也就是当前的后缀与之前 ...

  4. poj3177重修道路——边双连通分量缩点

    题目:http://poj.org/problem?id=3177 找桥,缩点,总之都是板子: 对于每个叶子,互相连一条边即可:若最后剩下一个,则去和根节点连边: 所以叶子节点数+1再/2即答案. 代 ...

  5. 解决Visual Code安装中文插件失败问题

    早已听闻Visual Code的大名,今日一用,果然不同凡响. 只不过,我的常用开发环境是不联网的,需要离线安装Visual Code和扩展插件. 以前要安装插件只能从VsCode里装,想离线安装比较 ...

  6. Tomcat访问程序外的上传文件

    自己在编写程序时,把图片上传到程序根目录下,但是页面使用<img> 没有显示.但是,当我刷新项目下文件夹后,页面刷新可以显示. 我通过网上查询,当在Tomcat下的server.xml配置 ...

  7. state estimation for robotics-1

    概率论是探讨SLAM的一个重要的工具,概率密度函数的概率意义在于它能够描述一个随机变量位于任意区间的概率. p(x<=x<=x+dx)≍p(x).dx(由拉格朗日中值定理)

  8. Updatepanel 中使用 Timer 控件 失去焦点问题

    在Update Panel 中 如果使用timer 定时刷新数据,会造成textbox 或者其他控件的焦点丢失问题. 所以 text box 不能和timer 放在同一个Updatepanel 中. ...

  9. CF 148D D Bag of mice (概率dp)

    题目链接 D. Bag of mice time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  10. Find First and Last Position of Element in Sorted Array

    问题:给定一个有序数组和一个目标值,输出目标值在数组中的起始位置和终止位置,如果目标值不在数组中,则输出[-1,-1] 示例: 输入:nums = [1,2,3,5,5,7] target = 5 输 ...