Model中的验证规则

时间:2024-08-02 20:05:38

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

本文目录

一、概述

二、MVC提供的常用上下文

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

一、概述

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

二、MVC提供的常用上下文

1.Model中的代码

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 }
Model中的验证规则

[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中的代码

Model中的验证规则
 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>
Model中的验证规则

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

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

3.Control中的代码

Model中的验证规则
 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 }
Model中的验证规则

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

4.运行效果Model中的验证规则

5.其他验证

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

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

1.常规方式

Model中的验证规则
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 }
Model中的验证规则

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

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

2.继承方式

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

Model中的验证规则
 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 }
Model中的验证规则

使用代码如下:

Model中的验证规则
 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 }
Model中的验证规则

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

3.运行效果

Model中的验证规则

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

http://www.cnblogs.com/iamlilinfeng