ASP.NET MVC 3.0(九): MVC 3.0 验证你的Model
2013-06-09 09:56
561 查看
ASP.NET MVC 3.0(一): MVC 3.0 的新特性 摘要
ASP.NET MVC 3.0(二): MVC的概念及MVC 3.0开发环境
ASP.NET MVC 3.0(三): 初识MVC的Url映射潜规则Routing
ASP.NET MVC 3.0(四): 我要MVC潜规则之配置Routing
ASP.NET MVC 3.0(五): 入手Controller/Action
ASP.NET MVC 3.0(六): MVC 3.0创建你的View视图
ASP.NET MVC 3.0(七): MVC 3.0 新的Razor引擎
ASP.NET MVC 3.0(八): MVC 3.0 传递和保存你的Model
ASP.NET MVC 3.0(九): MVC 3.0 验证你的Model
ASP.NET MVC 3.0(十): MVC 3.0 使用 Forms身份验证
ASP.NET MVC 3.0(十一): MVC 3.0 使用筛选器
ASP.NET MVC 3.0(十二): MVC 3.0 使用自定义的Html控件
ASP.NET MVC 3.0(十三): MVC 3.0 防止跨站点请求伪造 (CSRF) 攻击
ASP.NET MVC 3.0(十四): MVC 3.0 实例系列之创建数据表格
ASP.NET MVC 3.0(十五): MVC 3.0 实例系列之表格的排序
ASP.NET MVC 3.0(十六): MVC 3.0 实例系列之表格数据的分页
ASP.NET MVC 3.0(十七): MVC 3.0 实例之表格中数据的筛选
ASP.NET MVC 3.0(十八): MVC 3.0 实例系列之表格中合并排序、分页和筛选
ASP.NET MVC 3.0(十九): MVC 3.0 实例之使用开源控件实现表格排序和分页
上节我们学习了Model的数据在界面之间的传递,但是很多时候,我们在数据传递的时候为了确保数据的有效性,不得不给Model的相关属性做基本的数据验证。
本节我们就学习如何使用 System.ComponentModel.DataAnnotations 命名空间中的特性指定对数据模型中的各个字段的验证。
这些特性用于定义常见的验证模式,例如范围检查和必填字段。而 DataAnnotations 特性使 MVC 能够提供客户端和服务器验证检查,使你无需进行额外的编码来控制数据的有效。
System.ComponentModel.DataAnnotations 特性可用于实体数据模型 (EDM)、LINQ to SQL 和其他数据模型。 还可以创建自定义验证特性。
关于DataAnnotations请看System.ComponentModel.DataAnnotations概述
基本数据验证
创建项目新建名为User的Model类
以Create验证为例来学习DataAnnotations 验证。
新建Create方法
添加视图
注意:在添加视图的时候,如果强类型视图找不到Model,建议在重新生成解决方案。
非空验证
添加视图直接运行
字符长度验证
添加视图后直接运行
数字验证
添加视图直接运行
电话号码验证
添加视图运行效果
网址及电子邮件地址的验证
添加视图后运行效果
用户名已存在验证
Remote异步请求验证,在[HttpGet]时获取指定Controller里面的指定方法验证,
次方法必须是[HttpGet]标记的,返回类型为Json类型的JavaScript对象。
Model代码
Controller
直接添加视图运行
自定义Attribute验证
代码
效果
实例之:自定义双向验证Attribute验证属性
例如验证整数
添加名为IntegerAttribute的验证类
代码
Model属性
页面View需要添加异步验证的JavaScript代码
运行效果
总结
其实微软DataAnnotations验证一直是在VS平台上面充分运用的,不管是Web程序还是WForm程序甚至是Silverlight程序,都可以使用微软提高的DataAnnotations验证,可以说是无孔不入啊。不过就这三种程序而言,MVC的验证相对来说还是比较完善的,简单适用。
更多关于Validation验证的请看SilverlightValidation验证
转:记忆逝去的青春 http://www.cnblogs.com/lukun/
ASP.NET MVC 3.0(二): MVC的概念及MVC 3.0开发环境
ASP.NET MVC 3.0(三): 初识MVC的Url映射潜规则Routing
ASP.NET MVC 3.0(四): 我要MVC潜规则之配置Routing
ASP.NET MVC 3.0(五): 入手Controller/Action
ASP.NET MVC 3.0(六): MVC 3.0创建你的View视图
ASP.NET MVC 3.0(七): MVC 3.0 新的Razor引擎
ASP.NET MVC 3.0(八): MVC 3.0 传递和保存你的Model
ASP.NET MVC 3.0(九): MVC 3.0 验证你的Model
ASP.NET MVC 3.0(十): MVC 3.0 使用 Forms身份验证
ASP.NET MVC 3.0(十一): MVC 3.0 使用筛选器
ASP.NET MVC 3.0(十二): MVC 3.0 使用自定义的Html控件
ASP.NET MVC 3.0(十三): MVC 3.0 防止跨站点请求伪造 (CSRF) 攻击
ASP.NET MVC 3.0(十四): MVC 3.0 实例系列之创建数据表格
ASP.NET MVC 3.0(十五): MVC 3.0 实例系列之表格的排序
ASP.NET MVC 3.0(十六): MVC 3.0 实例系列之表格数据的分页
ASP.NET MVC 3.0(十七): MVC 3.0 实例之表格中数据的筛选
ASP.NET MVC 3.0(十八): MVC 3.0 实例系列之表格中合并排序、分页和筛选
ASP.NET MVC 3.0(十九): MVC 3.0 实例之使用开源控件实现表格排序和分页
上节我们学习了Model的数据在界面之间的传递,但是很多时候,我们在数据传递的时候为了确保数据的有效性,不得不给Model的相关属性做基本的数据验证。
本节我们就学习如何使用 System.ComponentModel.DataAnnotations 命名空间中的特性指定对数据模型中的各个字段的验证。
这些特性用于定义常见的验证模式,例如范围检查和必填字段。而 DataAnnotations 特性使 MVC 能够提供客户端和服务器验证检查,使你无需进行额外的编码来控制数据的有效。
System.ComponentModel.DataAnnotations 特性可用于实体数据模型 (EDM)、LINQ to SQL 和其他数据模型。 还可以创建自定义验证特性。
关于DataAnnotations请看System.ComponentModel.DataAnnotations概述
基本数据验证
创建项目新建名为User的Model类
publicclass User { publicint ID { get; set; } }
以Create验证为例来学习DataAnnotations 验证。
新建Create方法
//新建 // GET: /User/Create public ActionResult Create() { return View(); }
添加视图
注意:在添加视图的时候,如果强类型视图找不到Model,建议在重新生成解决方案。
非空验证
publicclass User { publicint ID { get; set; } [DisplayName("姓名")] [Required(ErrorMessage ="姓名不能为空")] publicstring Name { get; set; } }
添加视图直接运行
字符长度验证
publicclass User { publicint ID { get; set; } [DisplayName("姓名")] [Required(ErrorMessage ="姓名不能为空")] publicstring Name { get; set; } [DisplayName("密码")] [StringLength(6, ErrorMessage ="密码不能超过6个字符")] publicstring Password { get; set; } }
添加视图后直接运行
数字验证
[DisplayName("年龄")] [Range(1, int.MaxValue, ErrorMessage ="请输入大于等于1的数")] publicint Age { get; set; }
添加视图直接运行
电话号码验证
[DisplayName("电话")] [RegularExpression(@"^((0\d{2,5}-)|\(0\d{2,5}\))?\d{7,8}(-\d{3,4})?$", ErrorMessage ="电话格式有误。\n 有效格式为:\n①本区7或8位号码[-3或4位分机号码,可选]\n②(3~5位区号)7或8位号码[-3或4位分机号码,可选]\n③3~5位区号-7或8位号码[-3或4位分机号码,可选]\n示例:023-12345678;(023)1234567-1234")] publicstring Phone { get; set; }
添加视图运行效果
网址及电子邮件地址的验证
[DisplayName("电子邮件")] [RegularExpression(@"^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$", ErrorMessage ="请输入正确的Email格式\n示例:abc@123.com")] publicstring Email { get; set; } [DisplayName("网址")] [RegularExpression(@"http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?", ErrorMessage ="请输入合法的网址!\n示例:https://abc.a;http://www.abc.dd")] publicstring Httpaddress { get; set; }
添加视图后运行效果
用户名已存在验证
Remote异步请求验证,在[HttpGet]时获取指定Controller里面的指定方法验证,
次方法必须是[HttpGet]标记的,返回类型为Json类型的JavaScript对象。
Model代码
[DisplayName("姓名")] [Required(ErrorMessage ="姓名不能为空")] [Remote("GetUser", "User", ErrorMessage ="该姓名已存在")] publicstring Name { get; set; }
Controller
//新建 // GET: /User/Create public ActionResult Create() { return View(); } // 用于处理客户端的异步请求,测试时请使用字符串“aa” [HttpGet] public ActionResult GetUser(string name) { return Json(name !="aa", JsonRequestBehavior.AllowGet); } // // POST: /User/Create [HttpPost] public ActionResult Create(FormCollection collection) { try { // TODO: Add insert logic here return RedirectToAction("Index"); } catch { return View(); } }
直接添加视图运行
自定义Attribute验证
[Required] [ValidatePasswordLength] [DataType(DataType.Password)] [Display(Name ="密码")] publicstring Password { get; set; }
代码
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple =false, Inherited =true)] publicsealedclass ValidatePasswordLengthAttribute : ValidationAttribute, IClientValidatable { privateconststring _defaultErrorMessage ="'{0}' 必须至少包含 {1} 个字符。"; privatereadonlyint _minCharacters = Membership.Provider.MinRequiredPasswordLength; public ValidatePasswordLengthAttribute() : base(_defaultErrorMessage) { } publicoverridestring FormatErrorMessage(string name) { return String.Format(CultureInfo.CurrentCulture, ErrorMessageString, name, _minCharacters); } publicoverridebool IsValid(object value) { string valueAsString = value asstring; return (valueAsString !=null&& valueAsString.Length >= _minCharacters); } public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { returnnew[]{ new ModelClientValidationStringLengthRule(FormatErrorMessage(metadata.GetDisplayName()), _minCharacters, int.MaxValue) }; } }
效果
实例之:自定义双向验证Attribute验证属性
例如验证整数
添加名为IntegerAttribute的验证类
代码
// 继承 ValidationAttribute 抽象类,重写 IsValid() 方法,以实现服务端验证 // 实现 IClientValidatable 接口的 GetClientValidationRules() 方法,以实现客户端验证 publicclass IntegerAttribute : ValidationAttribute, IClientValidatable { // 服务端验证逻辑,判断输入是否为整型 publicoverridebool IsValid(object value) { var number = Convert.ToString(value); return Regex.IsMatch(number, @"^[0-9]+$"); } public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { var rule =new ModelClientValidationRule { ErrorMessage =this.ErrorMessage, // ValidationType - 指定一个 key(字符串),该 key 用于关联服务端验证逻辑与客户端验证逻辑。注:这个 key 必须都是由小写字母组成 ValidationType ="isinteger" }; // 向客户端验证代码传递参数 rule.ValidationParameters.Add("param1", "value1"); rule.ValidationParameters.Add("param2", "value2"); yieldreturn rule; } }
Model属性
[DisplayName("密码")] [Integer(ErrorMessage ="密码必须是整型")]//自定义验证 [StringLength(6, ErrorMessage ="密码不能超过6个字符")] publicstring Password { get; set; }
页面View需要添加异步验证的JavaScript代码
@model MvcApplication.Models.User @{ ViewBag.Title = "添加用户"; Layout = "~/Views/Shared/_Layout.cshtml"; } <h2> 添加用户</h2> <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> <script type="text/javascript"> // 客户端验证逻辑,判断输入是否为整型 jQuery.validator.addMethod( 'checkInteger', function (value, element) { var reg =new RegExp("^[0-9]+$"); return (reg.test(value)); } ); // 将客户端验证逻辑通过 ValidationType 与服务端的相关验证逻辑结合起来 jQuery.validator.unobtrusive.adapters.add( 'isinteger', // ValidationType,必须全为小写 ['param1', 'param2'], // 接收 ModelClientValidationRule 中的参数信息 function (options) { options.rules['checkInteger'] =true; // 启用名为 checkInteger 的客户端验证逻辑 options.messages['checkInteger'] = options.message; // 发生验证错误后的显示信息 // var param1 = options.params.param1; // ModelClientValidationRule 中的参数信息 // var param2 = options.params.param2; // ModelClientValidationRule 中的参数信息 // alert(param1 + " " + param2); } ); </script> @using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend>用户信息</legend> <div class="editor-label"> @Html.LabelFor(model => model.Name) </div> <div class="editor-field"> @Html.EditorFor(model => model.Name) @Html.ValidationMessageFor(model => model.Name) </div> <div class="editor-label"> @Html.LabelFor(model => model.Password) </div> <div class="editor-field"> @Html.EditorFor(model => model.Password) @Html.ValidationMessageFor(model => model.Password) </div> <div class="editor-label"> @Html.LabelFor(model => model.Age) </div> <div class="editor-field"> @Html.EditorFor(model => model.Age) @Html.ValidationMessageFor(model => model.Age) </div> <div class="editor-label"> @Html.LabelFor(model => model.Phone) </div> <div class="editor-field"> @Html.EditorFor(model => model.Phone) @Html.ValidationMessageFor(model => model.Phone) </div> <div class="editor-label"> @Html.LabelFor(model => model.Email) </div> <div class="editor-field"> @Html.EditorFor(model => model.Email) @Html.ValidationMessageFor(model => model.Email) </div> <div class="editor-label"> @Html.LabelFor(model => model.Httpaddress) </div> <div class="editor-field"> @Html.EditorFor(model => model.Httpaddress) @Html.ValidationMessageFor(model => model.Httpaddress) </div> <p> <input type="submit" value="添加"/> </p> </fieldset> } <div> @Html.ActionLink("返回列表", "Index") </div>
运行效果
总结
其实微软DataAnnotations验证一直是在VS平台上面充分运用的,不管是Web程序还是WForm程序甚至是Silverlight程序,都可以使用微软提高的DataAnnotations验证,可以说是无孔不入啊。不过就这三种程序而言,MVC的验证相对来说还是比较完善的,简单适用。
更多关于Validation验证的请看SilverlightValidation验证
转:记忆逝去的青春 http://www.cnblogs.com/lukun/
相关文章推荐
- 我要学ASP.NET MVC 3.0(九): MVC 3.0 验证你的Model
- 我要学ASP.NET MVC 3.0(九): MVC 3.0 验证你的Model
- [ASP.NET MVC 小牛之路]16 - Model 验证
- 返璞归真 asp.net mvc (8) - asp.net mvc 3.0 新特性之 Model
- ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现
- asp.net mvc Model验证总结及常用正则表达式
- ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上
- ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidatorProviders
- ASP.NET MVC基于标注特性的Model验证:ValidationAttribute
- Model in ASP.NET MVC 3.0
- ASP.NET MVC Model验证(一)
- ASP.NET MVC Model验证(二) 推荐
- ASP.NET MVC 3 Model【通过一简单实例一步一步的介绍】【续Model验证部分】
- asp.net mvc3.0通过窗体进行用户的验证(基于角色)
- ASP.NET MVC中对Model进行分步验证的解决方法
- ASP.NET MVC 3.0前后台统一验证类UniValidate,附源码 转载
- 【Asp.Net MVC】asp.net mvc Model验证总结及常用正则表达式
- ASP.NET MVC Model验证(五)
- 【ASP.NET Core快速入门】(十五)MVC开发:ReturnUrl实现、Model后端验证 、Model前端验证
- ASP.NET MVC Model验证(一)