ASP.NET MVC2 Model验证
来源:互联网 发布:九死惊陵甲 知乎 编辑:程序博客网 时间:2024/05/21 06:34
ASP.NET MVC2 支持2种验证模式,一种是前端验证,一种是服务端验证。
我们一般做项目都是2种一起用的。先使用前端验证的好处毋庸置疑,因为它是在客户端执行的,它会把错误消息直接反馈给客户而无须经过服务器的处理,这样就节省了服务器宝贵的资源。而之后的服务器验证呢,又能保证数据的严格符合规格。
第一步:建立一个叫做Order的Model。
using System.ComponentModel.DataAnnotations;using System.ComponentModel;namespace MvcSimpleModelBinding.Models{ public class Order { [Required(ErrorMessage = "First Name is required")] [DisplayName("First Name")] [StringLength(160)] public string FirstName { get; set; } [Required(ErrorMessage = "Last Name is required")] [DisplayName("Last Name")] [StringLength(160)] public string LastName { get; set; } [Required(ErrorMessage = "Address is required")] [StringLength(70)] public string Address { get; set; } }}
在这个Model里面,这些Required,StringLength代表的就是你的验证规则。比较详细的验证规则见以下列表:
- Range – 是你的数据是不是在某一个范围内的意思。
- ReqularExpression – 是你的数据是不是符合某一个正则表达式的意思
- Required – 要求你的数据必须是非空的
- StringLength – 要求你的字符串的长度必须小于或等于某一个值
代码中的ErrorMessage表示显示在页面上的错误信息。
你甚至可以写一个自定义的验证类,比如一个简单的例子,我需要让FirstName这个字段必须不以下划线开头,我们可以这么写:
首先创建一个类,叫做FirstNameAttribute,它必须继承ValidationAttribute这个类。
using System.ComponentModel.DataAnnotations;namespace MvcSimpleModelBinding.Models{ public class FirstNameAttribute : ValidationAttribute { public override bool IsValid(object value) { if (value == null) return false; if (value.ToString().StartsWith("_")) return false; return true; } }}
然后我们就能在FirstName这个字段上加上一个约束的规则。
[Required(ErrorMessage = "First Name is required")][DisplayName("First Name")][StringLength(160)][FirstName(ErrorMessage = "First Name cant start with \"_\"")]public string FirstName { get; set; }
第二步:我们现在来建立一个View。
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<MvcSimpleModelBinding.Models.Order>" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>OrderCreate</title> <!--启用客户端验证---> <script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script> <script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script></head><body> <% Html.EnableClientValidation(); //启用客户端验证 %> <% using (Html.BeginForm()) {%> <%: Html.ValidationSummary(true) %> <fieldset> <legend>Fields</legend> <div class="editor-label"> <%: Html.LabelFor(model => model.FirstName) %> </div> <div class="editor-field"> <%: Html.TextBoxFor(model => model.FirstName) %> <%: Html.ValidationMessageFor(model => model.FirstName) %> </div> <div class="editor-label"> <%: Html.LabelFor(model => model.LastName) %> </div> <div class="editor-field"> <%: Html.TextBoxFor(model => model.LastName) %> <%: Html.ValidationMessageFor(model => model.LastName) %> </div> <div class="editor-label"> <%: Html.LabelFor(model => model.Address) %> </div> <div class="editor-field"> <%: Html.TextBoxFor(model => model.Address) %> <%: Html.ValidationMessageFor(model => model.Address) %> </div> <p> <input type="submit" value="Create" /> </p> </fieldset> <% } %> <div> <%: Html.ActionLink("Back to List", "Index") %> </div></body></html>
第三步:我们现在来建立一个Action。
// GET: /Person/Createpublic ActionResult OrderCreate(){ return View();}[HttpPost]public ActionResult OrderCreate(Order order){ if (!ModelState.IsValid) { return View("OrderCreate", order); } return View();}
http://www.2cto.com/kf/201104/88727.html
Model类中可以添加的验证标记:
1. 必填字段
[Required]
public string FirstName { get; set; }
2. 字段长度
至多n位:
[StringLength(160)]
public string FirstName { get; set; }
要求至少n位:
[StringLength(160, MinimumLength=3)]
public string FirstName { get; set; }
3. 正则验证
[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}”)]
public string Email { get; set; }
4. 范围
[Range(35,44)]
public int Age { get; set; }
小数的情况:
[Range(typeof(decimal), “0.00”, “49.99”)]
public decimal Price { get; set; }
5. 比较
[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}”)]
public string Email { get; set; }
[Compare(“Email”)]
public string EmailConfirm { get; set; }
6. 自定义错误消息
正则:
[RegularExpression(@”[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}”,
ErrorMessage=”Email doesn’t look like a valid email address.”)]
public string Email { get; set; }
普通文本:
[Required(ErrorMessage=”Your last name is required”)]
[StringLength(160, ErrorMessage=”Your last name is too long”)]
public string LastName { get; set; }
占位符:
[Required(ErrorMessage=”Your {0} is required.”)]
[StringLength(160, ErrorMessage=”{0} is too long.”)]
public string LastName { get; set; }
常用正则表达式
数字:"^[0-9]*$"。
n位的数字:"^\d{n}$"。
至少n位的数字:"^\d{n,}$"。
m~n位的数字:。"^\d{m,n}$"
零和非零开头的数字:"^(0|[1-9][0-9]*)$"。
有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。
有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。
非零的正整数:"^\+?[1-9][0-9]*$"。
非零的负整数:"^\-[1-9][]0-9"*$。
长度为3的字符:"^.{3}$"。
由26个英文字母组成的字符串:"^[A-Za-z]+$"。
由26个大写英文字母组成的字符串:"^[A-Z]+$"。
由26个小写英文字母组成的字符串:"^[a-z]+$"。
由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。
由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。
验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
验证是否含有^%&’,;=?$\"等字符:"[^%&’,;=?$\x22]+"。
只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"
验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
验证InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX- XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
验证身份证号(15位或18位数字):"^\d{15}|\d{18}$"。
验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。
验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。
http://www.cnblogs.com/yeagen/archive/2012/09/24/2700836.html
- ASP.NET MVC2 Model验证
- asp.net MVC2 验证
- asp.net MVC2 验证
- 【飞秋】Asp.net MVC2 model验证 看似美好,实则让人失望。
- ASP.NET MVC2框架验证学习笔记
- asp.net mvc2 数据验证方法
- ASP.NET MVC2 数据模型验证类库:MVC Foolproof Validation
- ASP.NET MVC2 获取ModelState中的验证错误提示
- asp.net MVC2 学习
- asp.net mvc2.0 model 中包含泛型的字段的处理
- ASP.NET MVC2 同一view返回多个Model或数据集的方法
- ASP.NET MVC3中Model验证
- asp.net + MVC中model验证
- asp.net MVC3 model远程验证
- ASP.NET MVC3中Model验证
- ASP.NET MVC3 Model验证总结
- ASP.NET MVC3 Model验证总结
- ASP.NET MVC3 Model验证总结
- 第十四节 html5学习——Input
- 最短路
- 一顿牛排——自动发帖回复机
- 最短路
- C++ Primer 第二遍阅读笔记(第一章)
- ASP.NET MVC2 Model验证
- eclipse+pydev快捷键
- 召回率 Recall、精确度Precision、准确率Accuracy
- hdu2046 骨牌铺方格
- 第十五节 html5学习——表单元素
- 软件编程 我是一个菜鸟
- HEVC学习(二十八) —— 量化之二
- CString与LPCWSTR、LPSTR、char*、LPWSTR等类型的转换
- C++中extern “C”含义深层探索