ASP.NET MVC4中的Model验证 移除指定验证信息
MVC中通过Model在页面间传值使的程序开发变得更加的快捷,但是很多时候,我们在数据传递的时候为了确保数据的有效性,要对Model的相关属性做基本的数据验证。
不多说直接上个代码,Model的实体类
public class BadDebt
{
public int DebtId { get; set; }
[Required(ErrorMessage = "不能为空!")]
[RegularExpression("^\\w{1,20}$", ErrorMessage = "工作编号须为数字类型")]
public string JobNo { get; set; } [Required(ErrorMessage = "不能为空!")]
public bool HasContract { get; set; } [Required(ErrorMessage = "不能为空!")]
public bool HasLeader { get; set; } [Required(ErrorMessage = "不能为空!")]
[RegularExpression("^\\d{0,12}(.\\d{1,4})?$", ErrorMessage = "格式错误 如:999.9999")] //\\d{1,12}(.\\d{1,4})?
public decimal Cost { get; set; } [Required(ErrorMessage = "不能为空!")]
[StringLength(, ErrorMessage = "填写正确的销售员姓名")]
public string Salesman { get; set; } [StringLength()]
public string Reason { get; set; } [DataType(DataType.Date)]
public DateTime? CheckInTime { get; set; } [Required(ErrorMessage = "不能为空!")]
[DataType(DataType.Date, ErrorMessage = "请填写正确的坏账时间")]
public DateTime BadDebtTime { get; set; }
}
这里面包含了基本的数据非空验证,长度验证,日期格式验证,时间验证等,这些都是可以自定义的
View视图中添加验证信息
<tr>
<td width="" height="" align="right">工作编号:</td>
<td width="">
<label>
@Html.HiddenFor(m => m.DebtId)
@Html.TextBoxFor(m => m.JobNo, new { @class = "input_pt_c" })
@Html.ValidationMessageFor(m => m.JobNo)
</label>
</td>
</tr>
<tr>
<td height="" align="right">销售员:</td>
<td>
<label>
@Html.TextBoxFor(m => m.Salesman, new { @class = "input_pt_c" })
@Html.ValidationMessageFor(m => m.Salesman)
</label>
</td>
</tr>
<tr>
<td height="" align="right">有无带队人:</td>
<td>
@Html.RadioButtonFor(m => m.HasLeader, true)有带队人
@Html.RadioButtonFor(m => m.HasLeader, false)无带队人
</td>
</tr>
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
写上
@Html.ValidationMessageFor(m => m.JobNo)
后微软会自动生成程序锁需要的验证信息,加上隐藏域存放他的Id是为了方便操作
所有的也买年验证信息都存放进了ModelState这个类中,可以通过这个类在Controller中添加验证信息,方法是
if (badDeb.Salesman != null && !GetListSaler().Contains(badDeb.Salesman)) //验证所写的销售人员在公司销售人员名单上
{
ModelState.AddModelError("Salesman", "销售员必须包含在销售人员表中");
}
只有当所有的验证信息都通过的时候
ModelState.IsValid 的值才会为True,通过验证
看下View页面效果

这就是微软自带的验证方式,是不是看起来样子不一样,你右击查看源文件会看到
<input class="input-validation-error" data-val="true" data-val-number="字段 DebtId 必须是一个数字。" data-val-required="DebtId 字段是必需的。" id="DebtId" name="DebtId" type="hidden" value="" />
<input class="input-validation-error input_pt_c" data-val="true" data-val-regex="工作编号须为数字类型" data-val-regex-pattern="^\w{1,20}$" data-val-required="不能为空!" id="JobNo" name="JobNo" type="text" value="" />
<span class="field-validation-error" data-valmsg-for="JobNo" data-valmsg-replace="true">不能为空!
生成的页面样式的固定的所以只要在样式表中修改对应的样式就可了一了
理论上这样就完成了数据的验证,这里的数据验证包含了数据库验证,Model类验证,以及在Controller验证,这就完成了页面的新增,但是在做数据的修改的时候,由于数据的ID在数据库设计的时候是自动增长的,所以即使通过隐藏域获得了这条数据的ID,但是这个值在把这条数据加载到页面并修改后提交的时候还是不可避免的丢失了,这样导致了ModelState.IsValid 的值一直为false,删除页面隐藏域的话修改到时没有问题但是新增又会遇到问题。
这时候就想能不能不验证ModelState里面的一个信息,仔细查了MSDN的属性,发现了他有一个Remove()方法,参数是key,试一下
ModelState.Remove("DebtId");
OK 验证通过 ,这下就完美了
ASP.NET MVC4中的Model验证 移除指定验证信息的更多相关文章
- ASP.NET MVC中对Model进行分步验证的解决方法
原文:ASP.NET MVC中对Model进行分步验证的解决方法 在我之前的文章:ASP.NET MVC2.0结合WF4.0实现用户多步注册流程中将一个用户的注册分成了四步,而这四个步骤都是在完善一个 ...
- 在ASP.NET MVC4中实现同页面增删改查,无弹出框02,增删改查界面设计
在上一篇"在ASP.NET MVC4中实现同页面增删改查,无弹出框01,Repository的搭建"中,已经搭建好了Repository层,本篇就剩下增删改查的界面了......今 ...
- Asp.Net MVC4开发二: Entity Framework在Asp.Net MVC4中的应用
ORM作为一种数据库訪问机制已广泛地应用于各种项目其中,在.Net开发中,应用比較广泛的ORM框架大致有以下几个: 官方支持的有:Linq to SQL.Entity Framework.三方的有:N ...
- 从零开始实现asp.net MVC4框架网站的用户登录以及权限验证模块 详细教程
从零开始实现asp.net MVC4框架网站的用户登录以及权限验证模块 详细教程 用户登录与权限验证是网站不可缺少的一部分功能,asp.net MVC4框架内置了用于实现该功能的类库,只需要简单搭 ...
- ASP.NET MVC4中使用NHibernate
ASP.NET MVC4中使用NHibernate 1:下载安装NHibernate 打开 VS 2012新建一个 MVC4项目. 在项目名称上右击选择Manage NuGet Packages.你会 ...
- ASP.NET MVC4中的bundles特性引发服务器拒绝访问(403错误)
在ASP.NET MVC4中微软引入了bundles特性,这个特性可以将服务器端的多个Javascript或多个css文件捆绑在一起作为一个单一的URL地址供客户端浏览器调用,从而减少了页面上Http ...
- ASP.NET MVC中默认Model Binder绑定Action参数为List、Dictionary等集合的实例
在实际的ASP.NET mvc项目开发中,有时会遇到一个参数是一个List.Dictionary等集合类型的情况,默认的情况ASP.NET MVC框架是怎么为我们绑定ASP.NET MVC的Actio ...
- WebSocket在ASP.NET MVC4中的简单实现
WebSocket在ASP.NET MVC4中的简单实现 2013-12-21 20:48 by 小白哥哥, 810 阅读, 3 评论, 收藏, 编辑 WebSocket 规范的目标是在浏览器中实现和 ...
- MVC4 中的Model显示设置(含显示Shared/DisplayTemplates和编辑Shared/EditorTemplates)
转载于: MVC4 中的Model显示设置(含显示Shared/DisplayTemplates和编辑Shared/EditorTemplates) 虽然 [Display(Name="XX ...
随机推荐
- Raid1源代码分析--一些补充
Raid1的源码的读.写.同步,在本系列博客中都已经分析完成.除了barrier机制要专门拿出来分析(下一篇会写)以外,有一些问题值得思考和注意,分析如下. 1.freeze_array是如何做的? ...
- 【转】ASP.NET MVC框架下使用MVVM模式-KnockOutJS+JQ模板例子
KnockOutJS学习系列----(一) 好几个月没去写博客了,最近也是因为项目紧张,不过这个不是借口,J. 很多时候可能是因为事情一多,然后没法静下来心来去写点东西,学点东西. 也很抱歉,突然看到 ...
- SOFTWARE_INTRODUCE_01
&amp;amp;amp;lt;br data-mce-bogus="1"&amp;amp;amp;gt;&amp;amp;amp; ...
- js-权威指南学习笔记4
第五章 语句 1.在JS中没有块级作用域,在语句块中声明的变量并不是语句块私有的. 2.尽管函数声明语句和函数定义表达式具有相同的函数名,但二者仍然不同.两种方式都创建了新的函数对象,但函数声明语句中 ...
- SQL Server 2008 导出数据与导入数据任务介绍
一. 实例数据库介绍 源数据库Test_Other_DB:存在tb_Class,tb_Student,tb_TestTable三张表. 目标数据库TestDB_Output:空库,不含任何表. 二. ...
- lesson3:使用java代码的方式对不能识别的协议进行压力测试
在我们的实际环境中,我们所使用的协议肯定不只是http的方式,对于rpc等调用协议,目前jmeter没有相应的sampler支持,这时就需要通过引入我们自己写的jar包的方式来解决这个问题.例如:当我 ...
- 文件上传插件Uploadify在Struts2中的应用,完整详细实例
—>最近由于项目需要使用到一个上传插件,在网上发现uploadify挺不错,所以决定使用它,但是官网文档和例子是php的,而项目是SSI框架的,所以自己对uploadify在struts2中的使 ...
- java使用ObjectInputStream从文件中读取对象
import java.io.EOFException;import java.io.FileInputStream;import java.io.FileNotFoundException;impo ...
- 使用CXF+spring创建一个web的接口项目
一.web project整合spring 1.1.打开Myeclipse,建立web project(eclipse为dynamic web project),使用J2EE5.0. 1.2.加入Sr ...
- html5 canvas画进度条
这个ie8的兼容是个问题,ie8 的innerHTML有问题啊,添加两个附件吧 <!DOCTYPE html> <html> <head> <meta cha ...