在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. php 分享两种给图片加水印的方法

    本文章向码农们介绍 php 给图片加水印的两种方法,感兴趣的码农可以参考一下本文章的源代码. 方法一:PHP最简单的加水印方法 <?php // http://www.manongjc.com ...

  2. WIN7上搭建Windows Phone 8 开发环境——VMware Workstation下Win8 “无法安装Hyper-V, 某个虚拟机监控程序正在运行”问题解决的办法

    最近在试着在Windows 7上搭建Windows Phone 8的开发调试环境,使用的是VMware Workstation + Win8 Pro的虚拟环境, 在漫长的WPexpress_full下 ...

  3. Python和Django在Windows上的环境搭建

    作为一个.NET程序员,真心不喜欢Python以及PHP这种松散的语法.有人说,程序员应该多学几门语言,本想学习Java,无奈感觉Java的语法太啰嗦了.很多人都推荐Python,说它的语法简洁,执行 ...

  4. Git使用手册:HTTPS和SSH方式的区别和使用

    在管理Git项目上,很多时候都是直接使用https url克隆到本地,当然也有有些人使用SSH url克隆到本地.这两种方式的主要区别在于:使用https url克隆对初学者来说会比较方便,复制htt ...

  5. 【LeetCode】14. Longest Common Prefix 最长前缀子串

    题目: Write a function to find the longest common prefix string amongst an array of strings. 思路:求最长前缀子 ...

  6. word2010忽然无法撤销

    转:http://tieba.baidu.com/p/1115124288     第三楼 关闭正在运行的所有程序. 按Win-R,在运行框中键入regedit,然后单击“确定”. 在注册表编辑器中, ...

  7. NOIP2007 守望者的逃离-DP

    https://vijos.org/p/1431 描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守 ...

  8. javascript 实现HashTable(哈希表)

    一.javascript哈希表简介 javascript里面是没有哈希表的,一直在java,C#中有时候用到了这一种数据结构,javascript里面若没有,感觉非常不顺手.细细看来,其实javasc ...

  9. boost:thread使用实例

    /************************************************************************/ /*功能描述: boost thread使用实例 ...

  10. 背景图片background-size兼容ie8以下浏览器解决

    背景图片不够大,然后就想到用background-size:100%; 测试浏览器的时候发现ie8以下不兼容,图片会自动填充平铺过去,然后出现背景不好看的现象.解决方法: background-ima ...