MVC3 数据验证用法之密码验证设计思路
描述:MVC数据验证使用小结
内容:display,Required,stringLength,Remote,compare,RegularExpression
本人最近在公司用mvc做了一个修改密码的功能,使用的是mvc数据验证,现将使用心得分享给大家
首先,我们先分析一下,如果要实现密码修改功能,我们需要做哪些工作。先从页面说起吧,前台页面起码需要三个密码框吧,分别表示原始密码,新密码,重复新密码,最后再加一个按钮,这样一个页面的基本元素就构造完毕了
其次,我们需要对添加的数据进行验证,包括,原始密码正确性验证,新密码格式验证,重复输入的密码一致性验证
最后,我们把修改后的密码保存到数据库里就大功告成了(注:这里只是简单的实现了密码的修改功能)
所以,分析到这里,思路也就清晰了,下面就该实现了
一、设计思路
1、设计一个修改密码模型类
2、使用mvc创建一个该模型类的强类型视图
3、提交表单,将新密码保存到数据库
二、代码实现
1、我们先看一下设计的模型类的代码吧
1 public class UserPwdEditModel { 2 [Display(Name = "旧密码")] 3 [Required(ErrorMessage = "请输入 {0}。")] 4 [Remote("Validate", "UserInfo", HttpMethod = "post", ErrorMessage = "旧密码错误")] 5 [Editable(true)] 6 public string OldPwd { 7 get; 8 set; 9 } 10 11 [Display(Name = "新密码")] 12 [Required(ErrorMessage = "请输入 {0}。")] 13 [RegularExpression(@"^(([a-z]+)|([A-Z]+)).([0-9]+)", ErrorMessage = "密码只能包含英文、数字(必须以字母开头)")] 14 [StringLength(18, MinimumLength = 6, ErrorMessage = "密码长度限制在6-18个字符")] 15 public string NewPwd { 16 get; 17 set; 18 } 19 20 [Display(Name = "重复新密码")] 21 [Required(ErrorMessage = "请再次输入 新密码。")] 22 //[Remote("ValidateRepeatPwd", "UserInfo", HttpMethod = "post", AdditionalFields = "NewPwd", ErrorMessage = "两次密码不一致,请重新输入")] 23 [Compare("NewPwd", ErrorMessage = "两次密码不一致,请重新输入")] 24 public string RepeatPwd { 25 get; 26 set; 27 } 28 }
没错,我把页面上的基本元素做成了一个模型,这样可以很方便的使用mvc数据验证,其中Remote节里的参数分别代表action,controller,请求方式(Post/Get),错误提示信息ErrorMessage,action代码如下:
/// <summary> /// 验证旧密码是否正确 /// </summary> /// <param name="Password">旧密码</param> /// <returns>如果旧密码正确,返回true;反之,返回false</returns> [HttpPost] public JsonResult Validate(string OldPwd) { var str = this.db.Users.Where(p => p.ID == 1 && p.Password == OldPwd).FirstOrDefault(); bool isvalidate = false; if (str != null) isvalidate = true; return Json(isvalidate, JsonRequestBehavior.AllowGet); }
1 /// <summary> 2 /// 验证两次密码是否相同 3 /// </summary> 4 /// <param name="NewPwd">初始化新密码</param> 5 /// <param name="RepeatPwd">重复输入新密码</param> 6 /// <returns>返回两次密码比较结果,若相等,返回true;反之,返回false</returns> 7 [HttpPost] 8 public JsonResult ValidateRepeatPwd(string NewPwd, string RepeatPwd) { 9 bool isvalidate = false; 10 if (NewPwd.Trim().ToLower() == RepeatPwd.Trim().ToLower()) 11 isvalidate = true; 12 return Json(isvalidate, JsonRequestBehavior.AllowGet); 13 }
2、下面我们创建强类型视图(创建过程省略...)
1 @model GraduateMISX.ViewModels.UserInfo.UserPwdEditModel 2 @{ 3 ViewBag.Title = "PasswordEdit"; 4 Layout = "~/Views/Shared/_Layout.cshtml"; 5 } 6 7 @using (Html.BeginForm("PasswordEdit", "UserInfo", FormMethod.Get, new { 8 @id = "formOfBettersoft" 9 })) { 10 <div class="tree-add-group"> 11 <div class="tree-add-title"> 12 @Html.LabelFor(model => model.OldPwd) 13 </div> 14 <div class="tree-add-text"> 15 @Html.PasswordFor(model => model.OldPwd) 16 @Html.ValidationMessageFor(model => model.OldPwd) 17 </div> 18 </div> 19 <div class="tree-add-group"> 20 <div class="tree-add-title"> 21 @Html.LabelFor(model => model.NewPwd) 22 </div> 23 <div class="tree-add-text"> 24 @Html.PasswordFor(model => model.NewPwd) 25 @Html.ValidationMessageFor(model => model.NewPwd) 26 </div> 27 </div> 28 <div class="tree-add-group"> 29 <div class="tree-add-title"> 30 @Html.LabelFor(model => model.RepeatPwd) 31 </div> 32 <div class="tree-add-text"> 33 @Html.PasswordFor(model => model.RepeatPwd) 34 @Html.ValidationMessageFor(model => model.RepeatPwd) 35 </div> 36 </div> 37 <div class="tree-add-group"> 38 <input type="submit" value="保存" style="left: 200px" id="btnSubmit"/> 39 </div> 40 }
注:在使用Remote验证的时候应在Web.config文件下配置appsetting节
1 <appSettings> 2 <add key="ClientValidationEnabled" value="true" /> 3 <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 4 </appSettings>
三、运行截图
运行程序,点击提交按钮后将会看到模型验证已经生效