描述: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>
三、運行截圖
運行程序,點擊提交按鈕后將會看到模型驗證已經生效