一、概述

  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. caffe学习系列(4):视觉层介绍

    视觉层包括Convolution, Pooling, Local Response Normalization (LRN), im2col等层. 这里介绍下conv层. layer { name: & ...

  2. Ubuntu下编译安装OpenCV 2.4.7并读取摄像头[转]

    主要参考: 1.http://www.ozbotz.org/opencv-installation/ 2.http://www.ozbotz.org/opencv-install-troublesho ...

  3. 3.6---双栈排序(CC150)

    答,课本上的方法比较好. public static Stack<Integer> sort(Stack<Integer> s) { Stack<Integer> ...

  4. django 技巧锦集

    1. 如何将model对象转化成一个dict,这在restful api的设计上会有用. 答案:使用django.forms.models的model_to_dict方法,demo如下: from d ...

  5. phpcms常用方法简介

    function thumb() /** * 生成缩略图函数 * @param $imgurl 图片路径 * @param $width 缩略图宽度 * @param $height 缩略图高度 * ...

  6. 求教Sublime Text2 SublimeLinter插件安装问题

    昨天装了 SublimeLinter插件(代码语法检测),这个事插件的地址:https://github.com/Kronuz/SublimeLinter 按照作者的介绍配置了一下,发现语法检测不起作 ...

  7. js里面的 InttoStr 和 StrtoInt

    javascript 字符串 和 数字的转换,话说好灵活,感觉回不去pascal了 int转换string: 1,var str=String(int); 2,num.toString(param) ...

  8. FileUpload1上传控件

    <asp:FileUpload ID="FileUpload1" runat="server" /> string fn = System.IO.P ...

  9. apache的httpd.conf翻译

    # This is the main Apache HTTP server configuration file. It contains the 这是Apache HTTP Server的主配置文件 ...

  10. 【leetcode】Convert Sorted Array to Binary Search Tree (easy)

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 有序 ...