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>
配置web.config

三、運行截圖

運行程序,點擊提交按鈕后將會看到模型驗證已經生效

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM