標籤:字元 功能 attr word 號碼 遍曆 append 自訂 定義
ASP.NET MVC 會自動根據屬性的類型進行基本的校正,比如 int 類型的屬性,在提交非整數類型的資料的時候就會報錯。在 Action 中可以根據 ModelState.IsValid 進行判斷是否驗證通過,如果沒有通過,使用下面的方法可以擷取到報錯資訊:
public static string GetValidMsg(ModelStateDictionary modelState){ StringBuilder sb = new StringBuilder(); //遍曆所有的屬性 foreach (var key in modelState.Keys) { //如果當前屬性驗證通過,則直接下一個屬性 if(modelState[key].Errors.Count <=0) { continue; } sb.Append($"屬性【{key}】錯誤:"); //遍曆當前屬性的所有錯誤驗證資訊 foreach (var error in modelState[key].Errors) { sb.AppendLine(error.ErrorMessage); } } return sb.ToString();}
註:對於 ModelStateDictionary modelState, 要使用 System.Web.Mvc namespace 下的類。
ASP.NET MVC 提供了在服務端驗證請求資料的功能,只要在對應 Model的屬性上標註 Attribute 就可以了。
常用驗證 Attribute:
- [Required]:必填的
- [StringLength(100)]:字串最大長度100
- [StringLength(100, MininumLength=10)]:字串長度在10至100之間
- [RegularExpression("Regex")]:使用Regex進行匹配
- [Range(35,80)]:數值範圍在35至88
- [Compare("Password")]:標註這個 Attribute的屬性要跟 Password 屬性的值一樣
- [EmailAddress]:要符合郵箱格式
驗證 Attribute 上都有 ErrorMessage 屬性,可以用來自訂報錯資訊,ErrorMessage 中可以用 {0} 作為屬性名稱的佔位。
對於有些驗證規則,我們可以進行自訂。比如驗證QQ號碼:
//ValidationAttribute 在System.ComponentModel.DataAnnotations 命名空間下public class QQNumberAttribute:ValidationAttribute{ public QQNumberAttribute():base(@"^d{5,10}$") { this.ErrorMessage = "{0}屬性不是合法的 QQ 號"; }}
也可以重寫 IsValid() 方法:
public class QQNumberAttribute : ValidationAttribute{ public QQNumberAttribute() { this.ErrorMessage = "{0}屬性不是合法的 QQ 號"; }
public override bool IsValid(object value) { bool flag = Regex.IsMatch(value.ToString(), @"^d{5,10}$"); return flag; }}
(十二)ASP.NET MVC 資料驗證