zoukankan      html  css  js  c++  java
  • 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;
            }
    
  • 相关阅读:
    洛谷P2221 [HAOI2012]高速公路(线段树+概率期望)
    洛谷P2254 [NOI2005]瑰丽华尔兹(单调队列)
    洛谷P2607 [ZJOI2008]骑士(基环树)
    洛谷P1505 [国家集训队]旅游(树剖+线段树)
    洛谷P3250 [HNOI2016]网络(整体二分+树状数组+树剖)
    洛谷P3833 [SHOI2012]魔法树(树链剖分)
    洛谷P4216 [SCOI2015]情报传递(树剖+主席树)
    Ansible 利用playbook批量部署Nginx
    Ansible实现zabbix服务器agent端批量部署
    时间序列模型:ARIMA
  • 原文地址:https://www.cnblogs.com/RainbowInTheSky/p/4584411.html
Copyright © 2011-2022 走看看