在Model使用的時候很多人回向以前寫三層架構一樣使用它,將Model作為數據的傳遞者。
比如常見的寫法
public int Id { get; set; } public int RoleId { get; set; } public string Name { get; set; } public string Password { get; set; } public string NickName { get; set; } public string Avatar { get; set; } public string Email { get; set; } public string Phone { get; set; } public string Qq { get; set; } public DateTime AddTime { get; set; } public DateTime LastLoginTime { get; set; } public string LastLoginIp { get; set; } public bool IsLock { get; set; } public bool IsSuperUser { get; set; }
這種寫法是最常遇到的,我見多過的代碼生成器也是如此生成。很多人將model當做了數據的傳遞者,數據的臨時區。
其實Model也可以用來驗證數據,引用:using System.ComponentModel.DataAnnotations;空間
[Display(Name = "ID")] public int Id { get; set; } [Required(ErrorMessage = "角色ID不能為空")] [Display(Name = "角色ID")] public int RoleId { get; set; } [Required(ErrorMessage = "賬戶名不能為空")] [Display(Name = "賬戶名")] public string Name { get; set; } [Required(ErrorMessage = "密碼不能為空")] [Display(Name = "密碼")] public string Password { get; set; } [Display(Name = "昵稱")] public string NickName { get; set; } [Display(Name = "頭像")] [DataType(DataType.Text)] public string Avatar { get; set; } [Display(Name = "郵箱")] public string Email { get; set; } [Display(Name = "手機")] public string Phone { get; set; } [Display(Name = "QQ號碼")] public string Qq { get; set; } [Display(Name = "添加時間")] public DateTime AddTime { get; set; } [Display(Name = "最近登錄時間")] public DateTime LastLoginTime { get; set; } [Display(Name = "最近登錄IP")] public string LastLoginIp { get; set; } [Display(Name = "是否鎖定")] public bool IsLock { get; set; } [Display(Name = "是否超級管理員")] public bool IsSuperUser { get; set; }
寫過MVC的都會有所有了解,默認的項目裡面就有這樣的例子。
但是很多人用不好,或者不會用。在控制器裡面可以這樣判斷模型是否驗證成功ModelState.IsValid。
但是這樣好不夠,有時候有些字段是不需要驗證的,有些又必須驗證。這樣 ModelState.Remove("驗證的字段");就可以靈活使用了,想忽略那個就是那個。
另外附送一個取出錯誤的方法,返回單條錯誤。不必要每個都輸出(我用這個取出單個錯誤,然後json傳輸給客戶端)。
/// <summary> /// 得到單條錯誤信息 /// </summary> /// <param name="dic"></param> /// <returns></returns> public static string GetModelErros(this ModelStateDictionary dic) { string errors = ""; if (!dic.IsValid) { //獲取第一個 //errors = dic.Keys.First<string>(); errors = dic.Values.First(t => t.Errors.Count > 0).Errors[0].ErrorMessage; } return errors; }