码迷,mamicode.com
首页 > Web开发 > 详细

MVC中Model,不仅仅只是数据的传递者

时间:2015-06-17 23:17:55      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

在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;
        }

 

MVC中Model,不仅仅只是数据的传递者

标签:

原文地址:http://www.cnblogs.com/RainbowInTheSky/p/4584411.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!