MVC中Model,不仅仅只是数据的传递者
在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; }
因缘际会的相遇,自当有非同寻常的结局
QQ交流群:110826636