在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,不仅仅只是数据的传递者的更多相关文章

  1. MVC5中Model层开发数据注解 EF Code First Migrations数据库迁移 C# 常用对象的的修饰符 C# 静态构造函数 MSSQL2005数据库自动备份问题(到同一个局域网上的另一台电脑上) MVC 的HTTP请求

    MVC5中Model层开发数据注解   ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证( ...

  2. ASP.NET的MVC中Model对象字段的数…

    ASP.NET的MVC中Model对象字段的常用数据说明属性: Required——该字段不允许为空. MaxLength——设置数组或字符串最大长度. StringLength——设置字符串最小和最 ...

  3. MVC中Model和model的区别和用户

    MVC中Model和model的区别,它们应该怎么用呢? 使用@model关键字可以定义一个Action里所对应的一个模型(经常可以叫他实体类). MVC的第一个字母M是Model,承载着View层和 ...

  4. MVC中Model BLL层Model模型互转

    MVC中Model BLL层Model模型互转 一. 模型通常可以做2种:充血模型和失血模型,一般做法是模型就是模型,不具备方法来操作,只具有属性,这种叫做失血模型(可能不准确):具备对模型一定的简单 ...

  5. mvc中的几个数据传递

    1.ViewData对象 ViewBagData是一种字典集合数据同时属于视图基类和控制器基类的属性. 实例: //控制器 public class HomeController:Controller ...

  6. Spring MVC中Controller如何将数据返回给页面

    要实现Controller返回数据给页面,Spring MVC 提供了以下几种途径: ModelAndView:将视图和数据封装成ModelAndView对象,作为方法的返回值,数据最终会存到Http ...

  7. MVC中Model用法

    Model:对于MVC来说,Model可不简单只是实体,它应该叫视图模型,这是我自己的理解,即视图中的数据由Model来提供,当视图的数据需要改变时,我们不用打开aspx或ascx文件,只需要修改相应 ...

  8. MVC5中Model层开发数据注解

    ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证(在服务器端和客户端验证数据的有效性) 数 ...

  9. MVC中Model元数据及绑定机制

    ASP.NET MVC的Model为View Model,表示最终呈现在View上的数据,而Model元数据的一个重要的作用在于控制对象在View上的呈现方式.说得更加具体点,就是基于某种数据类型的M ...

随机推荐

  1. Spring的java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!异常处理方法

    使用Spring提供的模板类HibernateDaoSupport,如果单纯的使用'命名参数'的形式编写HQL语句如: public class UserDaoImpl extends Hiberna ...

  2. DP Hrbust1186青蛙过河

    http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1186 #include<st ...

  3. [ CodeVS冲杯之路 ] P1053

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1053/ 直接扫一遍串,把字母对应的 ascii 码直接做数组下标,交给数组统计 最后查询一遍数组的 'a'-'z' , ...

  4. oracle 索引失效原因

    转自  http://www.cnblogs.com/orientsun/archive/2012/07/05/2577351.html Oracle 索引的目标是避免全表扫描,提高查询效率,但有些时 ...

  5. .NET MVC4.0与CA对接

    1.改web.confog 2.引用CA提供的 dll 3.在controller层加个方法,记得加上授权认证的特性,获取信息 [Authorize] publi void calogin() { H ...

  6. AD采样问题总结

    说明:来源http://bbs.csdn.net/topics/390899032论坛讨论 一个100HZ的正弦波,我用300HZ的采样率去采样,那么根据香农定律是不是一秒钟就采集到300个点,因为这 ...

  7. linux查看内存和回收内存

    清理前内存使用情况 free -m free -g echo 1 > /proc/sys/vm/drop_caches 清理后内存使用情况 free -m

  8. js种的循环语句

    //js种的循环语句 //while与do while的区别是while是满足条件后才执行 //do while是不管满不满足条件都会执行一次 //for 循环与while,do while相比循环结 ...

  9. js动态生成JSON树

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 要在一般处理程序中获取其他页面的session值

    1.要在一般处理程序中获取其他页面的session值,需要引用名空间: using System.Web.SessionState; 2.然后继承一个接口:IRequiresSessionState, ...