一、概述

  MVC分为ViewModel、Control、View,对数据的封装MVC做的很好,确实是不错的WEB框架,针对MVC的ViewModel封装的也是相当的不错,最近做一个MVC的项目,采用的框架MVC4+JQuery+JQueryUI。由于开发需要,也特别研究了一下MVC中的ViewMode的数据校验,觉得MVC这种模式真的真赞,现总结一下ViewModel的使用方式;

二、ViewModel基础特性

  基本特性的命名空间位于: System.ComponentModel.DataAnnotations 和 System.Web.Mvc;

1、Required

  说明:必填项,当提交数据该缺少的时候,就会引发异常;

  举例:[Required]

2、StringLength

  说明:指定运行的长度,指定最大长度、最小长度以及错误消息

  举例:[StringLength(30, ErrorMessage = "{0}长度必须在{2}至{1}个字符间", MinimumLength = 6)]

3、RegularExpression

  说明:正则表达式匹配,匹配失败引发异常;

举例:[RegularExpression("^[A-Za-z0-9_]+$",ErrorMessage="密码必须是字母、数字或下划线")]

4、Range

  说明:数据大小范围,一般为数字类型属性;

  举例:[Range(35,44,ErrorMessage="数据不能小于35也不能大于44")] //整型,最小35,最大44

5、Remote

  说明:数据远程校验,Ajax数据请求

  举例:[Remote("CheckUserExits", "SysAdmin", ErrorMessage = "该账号已存在")]

6、Compare

  说明:匹配两个数据,内容不一致则引发错误

  举例:[Compare("Password",ErrorMessage="新密码和确认密码不一致")]

7、Display

  说明:现实属性名称

  举例:[Display(Name="确认密码")]

三、使用说明

MVC数据校验分为2种方式,客户端校验和后台校验,使用的时候,需要配置webconfig文件;

1、配置web config

<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>

2、引用前台客户端JS验证还需在页面配置

2.1、引入JS和CSS文件

    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<script src="http://www.cnblogs.com/Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="http://www.cnblogs.com/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="http://www.cnblogs.com/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>

2.2、页面添加:

@{
Html.EnableClientValidation();
}

2.3、页面Form窗体展示不能使用<form>....</form>,而是采用Html.BeginForm的方式进行

 @using (Html.BeginForm())
{
<td align="right">@Html.LabelFor(model => model.AdminCode)</td>
<td>@Html.TextBoxFor(model => model.AdminCode, new { @class = "manager-from02" })</td>
<td>@Html.ValidationMessageFor(Model => Model.AdminCode)</td> }

另外有时候默认的样式,存在site.css不是我们需要的样式 ,我们可以效果默认样式,或者添加自定义Class;

四、使用举例

1、ViewModel代码块

public class AdminCreateViewModel:BaseViewModel
{
[Required]
[Display(Name="账号")]
[StringLength(,ErrorMessage="{0}长度在{2}至{1}个字符间",MinimumLength=)]
[Remote("CheckUserExits", "SysAdmin", ErrorMessage = "该账号已存在")]
public string AdminCode { get; set; } [Required]
[DataType(DataType.Password)]
[StringLength(, ErrorMessage = "{0}长度必须在{2}至{1}个字符间", MinimumLength = )]
[RegularExpression("^[A-Za-z0-9_]+$",ErrorMessage="密码必须是字母、数字或下划线")]
[Display(Name="新密码")] public string Password { get; set; }
[Display(Name="确认密码")]
[DataType(DataType.Password)]
[Compare("Password",ErrorMessage="新密码和确认密码不一致")]
public string ConfirmPassword { get; set; } [Required]
[Display(Name = "级别")]
public string PowerCode { get; set; } //管理员姓名
[Required]
[RegularExpression(@"^(\w|[\u4e00-\u9fa5])*$", ErrorMessage = "输入数据无效")]
[Display(Name = "姓名")]
public string Name { get; set; } //管理员电话
[DataType(DataType.PhoneNumber)]
[RegularExpression(@"(^(13[0-9]{9})|(15[89][0-9]{8})$)|(^(\s*)$)",ErrorMessage="电话号码格式不正确")]
[Display(Name = "电话")]
public string PhoneNo { get; set; }
//管理员Email
[Display(Name="邮箱")]
[DataType(DataType.EmailAddress)]
[RegularExpression(@"(\w*@\w*)|(^(\s*?)$)", ErrorMessage = "邮箱格式不正确")]
public string Email { get; set; }
//管理员所属单位
[Display(Name = "单位")]
[RegularExpression(@"(^(\w|[\u4e00-\u9fa5])*$)|(^(\s*)$)", ErrorMessage = "输入数据无效")]
public string Comp { get; set; }
//管理员所属部门
[Display(Name = "部门")]
[RegularExpression(@"(^(\w|[\u4e00-\u9fa5])*$)|(^(\s*)$)", ErrorMessage = "输入数据无效")]
public string Dep { get; set; }
//管理员所属职位
[Display(Name = "职位")]
[RegularExpression(@"(^(\w|[\u4e00-\u9fa5])*$)|(^(\s*)$)", ErrorMessage = "输入数据无效")]
public string JobPost { get; set; }
//管理员状态
public bool Disable { get; set; }
}

2、View代码块

@model WebMgr.Models.AdminCreateViewModel
@{
ViewBag.Title = "Create";
Layout = "~/Views/Shared/_Layout.cshtml";
Html.EnableClientValidation();
} <div align="center">
<div class="manager-daohang">
<div class="manager-daohang-04">@Html.ActionLink("管理员列表","Index","SysAdmin")</div>
<div class="manager-daohang-03">添加管理员</div>
</div>
<div>
@using (Html.BeginForm())
{ <input type="hidden" name="Disable" value="true"/>
<table width="100%" border="" cellpadding="" cellspacing="" class="manager-Table-01">
<tr>
<td align="right" width="">&nbsp;</td>
<td width="">&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td align="right">@Html.LabelFor(model => model.AdminCode)</td>
<td>@Html.TextBoxFor(model => model.AdminCode, new { @class = "manager-from02" })</td>
<td>@Html.ValidationMessageFor(Model => Model.AdminCode)</td>
</tr>
<tr>
<td align="right">@Html.LabelFor(model => model.Password)</td>
<td>@Html.PasswordFor(model => model.Password, new { @class = "manager-from02" })</td>
<td>@Html.ValidationMessageFor(Model => Model.Password)</td>
</tr>
<tr>
<td align="right">@Html.LabelFor(model => model.Password)</td>
<td>@Html.PasswordFor(model => model.ConfirmPassword, new { @class = "manager-from02" })</td>
<td>@Html.ValidationMessageFor(Model => Model.ConfirmPassword)</td>
</tr>
<tr>
<td align="right">@Html.LabelFor(model => model.PowerCode)</td>
<td>
<select name="PowerCode" class="manager-from02" id="PowerCode">
<option selected="selected">选择管理员级别</option>
<option value="AD5235864">超级管理员</option>
<option value="AD8456212">一级管理员</option>
<option value="AD5235864">二级管理员</option>
</select>
</td>
</tr>
<tr>
<td align="right">@Html.LabelFor(model => model.Name)</td>
<td>@Html.TextBoxFor(model => model.Name, new { @class = "manager-from02" })</td>
<td>@Html.ValidationMessageFor(Model => Model.Name)</td>
</tr>
<tr>
<td align="right">@Html.LabelFor(model => model.Comp)</td>
<td>@Html.TextBoxFor(model => model.Comp, new { @class = "manager-from02" })</td>
<td>@Html.ValidationMessageFor(Model => Model.Comp)</td>
</tr>
<tr>
<td align="right">@Html.LabelFor(model => model.Dep)</td>
<td>@Html.TextBoxFor(model => model.Dep, new { @class = "manager-from02" })</td>
<td>@Html.ValidationMessageFor(Model => Model.Dep)</td>
</tr>
<tr>
<td align="right">@Html.LabelFor(model => model.JobPost)</td>
<td>@Html.TextBoxFor(model => model.JobPost, new { @class = "manager-from02" })</td>
<td>@Html.ValidationMessageFor(Model => Model.JobPost)</td>
</tr>
<tr>
<td align="right">@Html.LabelFor(model => model.PhoneNo)</td>
<td>@Html.TextBoxFor(model => model.PhoneNo, new { @class = "manager-from02" })</td>
<td>@Html.ValidationMessageFor(Model => Model.PhoneNo)</td>
</tr>
<tr>
<td align="right">@Html.LabelFor(model => model.Email)</td>
<td>@Html.TextBoxFor(model => model.Email, new { @class = "manager-from02" })</td>
<td>@Html.ValidationMessageFor(Model => Model.Email)</td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input name="button" type="submit" class="manager-from03" id="button" value="确认添加"></td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>
}
</div>
</div>
@section scripts
{
@Scripts.Render("~/bundles/jqueryval")
}

参考文章:

1、MVC验证 http://www.cnblogs.com/kissdodog/archive/2013/05/04/3060278.html

2、MVC验证:http://blog.csdn.net/wanglei_samrtfish/article/details/6862770

.NET MVC4 数据验证Model(二)的更多相关文章

  1. MVC4 数据验证、特性、自动属性总结

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    最近在做自学MVC,遇到的问题很多,索性一点点总结 ...

  2. <转>ASP.NET学习笔记之MVC 3 数据验证 Model Validation 详解

    MVC 3 数据验证 Model Validation 详解  再附加一些比较好的验证详解:(以下均为引用) 1.asp.net mvc3 的数据验证(一) - zhangkai2237 - 博客园 ...

  3. asp.net mvc3 数据验证(二)——错误信息的自定义及其本地化

    原文:asp.net mvc3 数据验证(二)--错误信息的自定义及其本地化 一.自定义错误信息         在上一篇文章中所做的验证,在界面上提示的信息都是系统自带的,有些读起来比较生硬.比如: ...

  4. MVC 3 数据验证 Model Validation 详解

    在MVC 3中 数据验证,已经应用的非常普遍,我们在web form时代需要在View端通过js来验证每个需要验证的控件值,并且这种验证的可用性很低.但是来到了MVC 新时代,我们可以通过MVC提供的 ...

  5. (转)MVC 3 数据验证 Model Validation 详解

    继续我们前面所说的知识点进行下一个知识点的分析,这一次我们来说明一下数据验证.其实这是个很容易理解并掌握的地方,但是这会浪费大家狠多的时间,所以我来总结整理一下,节约一下大家宝贵的时间. 在MVC 3 ...

  6. Spring MVC 使用介绍(十五)数据验证 (二)依赖注入与方法级别验证

    一.概述 JSR-349 (Bean Validation 1.1)对数据验证进一步进行的规范,主要内容如下: 1.依赖注入验证 2.方法级别验证 二.依赖注入验证 spring提供BeanValid ...

  7. MVC数据验证Model Validation

    Required必须项验证属性 [Required] public string FirstName { get; set; } //ID编号 [ScaffoldColumn(false)] [Req ...

  8. asp.net mvc3 数据验证(四)—Remote验证的一个注意事项

    原文:asp.net mvc3 数据验证(四)-Remote验证的一个注意事项         前几篇把asp.net mvc3 中基于Model的主要数据验证的方法都已经讲完了,本节纯粹只是讲一个我 ...

  9. C# MVC验证Model

    .NET Core MVC3 数据模型验证的使用 这里我先粘贴一个已经加了数据验证的实体类PeopleModel,然后一一介绍. using System; using System.Collecti ...

随机推荐

  1. OpenCV加载图像并显示

    从文件中读取一直一张图片,并加载出来 代码: #include "stdafx.h" #include "iostream" using namespace s ...

  2. Android架构:用消息机制获取网络数据

    网络请求,不管是什么协议,是长连接还是短连接,总是一个异步的请求,过程包括:加请求参数->发起请求->接收响应->解析数据->获得业务数据. 最挫的做法是,业务代码包揽所有这些 ...

  3. python查找并删除相同文件-UNIQ File-wxPython-v6

    相比第一版,新增:菜单,对话框,文件过滤器,操作结果保存,配置功能(自己写了一个读写配置文件的功能),提示语优化,模块分化更合理. 截图: 源代码: UniqFile-wxPython-v6.py: ...

  4. chkconfig用法 LINUX

    chkconfig用法 有时候为了方便管理,我们常常喜欢在Linux中将之安装为服务,然后就可以使用服务来管理. 但是当我们运行安装服务的命令时候,假设服务名为myservice #chkconfig ...

  5. curl api create domain

    from: https://adam.younglogic.com/2013/09/keystone-v3-api-examples/ http://docs.openstack.org/develo ...

  6. C# 类成员备忘

    隐藏基类的方法 调用重写或隐藏的基类方法 嵌套的类型定义 隐藏基类的方法 当从基类继承一个(非抽象)成员时,也就继承了其实现的代码,如果继承的成员是虚拟的,就可以用Overrid重写这段实现代码, 无 ...

  7. cxGrid 速度

    在做AdoHelper实用程序的时候,我用了DevExpress的cxGrid控件.在此之前用的是dbgrid,考虑到不能把所有的数据都拉到本地,我用了动态生成的select top 500的命令.这 ...

  8. MySQL SQL优化之in与range查询【转】

    本文来自:http://myrock.github.io/ 首先我们来说下in()这种方式的查询.在<高性能MySQL>里面提及用in这种方式可以有效的替代一定的range查询,提升查询效 ...

  9. ffmpeg-20160508-git-bin-v2

    ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ...

  10. SUSE下FTP服务器搭建

    FTP(File Transfer Protocol),是TCP/IP网络上两台计算机传送文件的协议,是在TCP/IP网络和Internet上最早使用的协议之一,属于网络协议组的应 用层.FTP客户机 ...