一、能够使用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. bzoj1177&p3625 [APIO2009]采油区域p[大力讨论]

    我好菜菜啊. 给定矩形,从中选出三个边长K的正方形互不重叠,使得覆盖到的数总和最大. 想的时候往dp上钻去了..结果一开始想了一个错的dp,像这样 /************************* ...

  2. bzoj 4275 Badania naukowe —— DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4275 枚举 \( C \) 在 \( A \) 和 \( B \) 中的位置,然后取它前后的 ...

  3. MyEclipse修改Servlet模板

    进入myeclipse的安装路径 然后进入plugins文件夹 打开搜索框,输入 *wizard* 找到名字是 com.genuitec.eclipse.wizards_11.5.0.me201310 ...

  4. Scala学习——array与arraybuffer的区别(初)

    1.由于Array是不可变的,所以不能直接地对其元素进行删除操作,只能通过重赋值或过滤生成新的Array的方式来删除不要的元素. 而ArrayBuffer是可变的,本身提供了很多元素的操作,当然包括删 ...

  5. .NETFramework-Web.Services:WebMethodAttribute

    ylbtech-.NETFramework-Web.Services:WebMethodAttribute 1.程序集 System.Web.Services, Version=4.0.0.0, Cu ...

  6. JavaScript与DOM常见面试题

    1. JavaScript 1.1.简要描述 JavaScript的数据类型? 参考答案: Java Sc ri pt 的数据类型可以分为原始类型和对象类型.原始类型包括 string. number ...

  7. 自定义TabWidget

    在开发过程中,默认的TabWidget不能满足我们对于UI的要求并且没有足够的属性工我们去修改,这个时候能够自定义TabWidget是非常必要的.自定义TabWidget组要运用的是TabSpec.s ...

  8. C# 写 LeetCode easy #9 Palindrome Number

    9.Palindrome Number Determine whether an integer is a palindrome. An integer is a palindrome when it ...

  9. 截图上传功能 imageAreaselect

    前台: <script src="~/Scripts/jquery-2.1.4.min.js"></script> <link href=" ...

  10. 51nod1202【DP-树状数组维护】

    思路: DP[i]代表从1 到 i 以 a[i] 为末尾的子序列个数,dp[i]=dp[i]+dp[j](a[i]!=a[j]) +1 利用树状数组维护以值 a[i] 结尾的子序列个数. #inclu ...