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验证 移除指定验证信息的更多相关文章

  1. ASP.NET MVC中对Model进行分步验证的解决方法

    原文:ASP.NET MVC中对Model进行分步验证的解决方法 在我之前的文章:ASP.NET MVC2.0结合WF4.0实现用户多步注册流程中将一个用户的注册分成了四步,而这四个步骤都是在完善一个 ...

  2. 在ASP.NET MVC4中实现同页面增删改查,无弹出框02,增删改查界面设计

    在上一篇"在ASP.NET MVC4中实现同页面增删改查,无弹出框01,Repository的搭建"中,已经搭建好了Repository层,本篇就剩下增删改查的界面了......今 ...

  3. Asp.Net MVC4开发二: Entity Framework在Asp.Net MVC4中的应用

    ORM作为一种数据库訪问机制已广泛地应用于各种项目其中,在.Net开发中,应用比較广泛的ORM框架大致有以下几个: 官方支持的有:Linq to SQL.Entity Framework.三方的有:N ...

  4. 从零开始实现asp.net MVC4框架网站的用户登录以及权限验证模块 详细教程

    从零开始实现asp.net MVC4框架网站的用户登录以及权限验证模块 详细教程   用户登录与权限验证是网站不可缺少的一部分功能,asp.net MVC4框架内置了用于实现该功能的类库,只需要简单搭 ...

  5. ASP.NET MVC4中使用NHibernate

    ASP.NET MVC4中使用NHibernate 1:下载安装NHibernate 打开 VS 2012新建一个 MVC4项目. 在项目名称上右击选择Manage NuGet Packages.你会 ...

  6. ASP.NET MVC4中的bundles特性引发服务器拒绝访问(403错误)

    在ASP.NET MVC4中微软引入了bundles特性,这个特性可以将服务器端的多个Javascript或多个css文件捆绑在一起作为一个单一的URL地址供客户端浏览器调用,从而减少了页面上Http ...

  7. ASP.NET MVC中默认Model Binder绑定Action参数为List、Dictionary等集合的实例

    在实际的ASP.NET mvc项目开发中,有时会遇到一个参数是一个List.Dictionary等集合类型的情况,默认的情况ASP.NET MVC框架是怎么为我们绑定ASP.NET MVC的Actio ...

  8. WebSocket在ASP.NET MVC4中的简单实现

    WebSocket在ASP.NET MVC4中的简单实现 2013-12-21 20:48 by 小白哥哥, 810 阅读, 3 评论, 收藏, 编辑 WebSocket 规范的目标是在浏览器中实现和 ...

  9. MVC4 中的Model显示设置(含显示Shared/DisplayTemplates和编辑Shared/EditorTemplates)

    转载于: MVC4 中的Model显示设置(含显示Shared/DisplayTemplates和编辑Shared/EditorTemplates) 虽然 [Display(Name="XX ...

随机推荐

  1. 使用MapReduce将HDFS数据导入到HBase(二)

    package com.bank.service; import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.conf. ...

  2. ubantu14.04 apache2 支持重写模式

    想要开启thinkphp的重写模式,apache必须.htaccess支持, 其他情况也有需要开启.htaccess支持的. 下面是ubantu开启方法: 0. .htaccess这个文件应该放在与入 ...

  3. 解决Xcode8 输出一对字符串问题

    在Product->Scheme->Edit Scheme->Run->Environment Variables下添加键:OS_ACTIVITY_MODE, 值:Disabl ...

  4. Highcharts 带有数据标签曲线图表

    <html> <head> <meta charset="UTF-8" /> <title>Highcharts</title ...

  5. SQL Server 2008 导出数据与导入数据任务介绍

    一. 实例数据库介绍 源数据库Test_Other_DB:存在tb_Class,tb_Student,tb_TestTable三张表. 目标数据库TestDB_Output:空库,不含任何表. 二. ...

  6. 手势触摸定位(UIPanGestureRecognizer)

    /** 1.相对于父坐标系而言,表示当前触摸点所在的位置 */ CGPoint locationPoint = [panGestureRecognizer locationInView:panGest ...

  7. Panel( 面板) 组件 上

    一. 加载方式//class 加载方式<div class="easyui-panel" data-options="closable:true"titl ...

  8. html 文字溢出标签

    overflow:visible;作用:能看到溢出部分. overflow: hidden;作用:溢出部分看不到 overflow:scroll; 作用:出现一个滚动条(不超过的文字也会在滚动条里) ...

  9. DateTime对象反序列化的那些事

    今天在Android的Json反序列化过程中,Date类型无法转化成自己想要的格式,鉴于之前在C#的反序列话中也遇到过这个问题,解决的同时,顺手做个总结,供自己及需要的人日后查阅.       将Da ...

  10. C#操作EXCEL的时候出现“ 无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的COM 对象强制转换为接口类型“Microsoft.Office.Interop.Excel._Application” ”问题

    总是报出这个错误,准备放弃COM的组件转投NPOI,后来想起在装这个操作系统的时候,自带装过WPS,后来使用360卸载了.于是想着试一试的心态,重新安装了WPS,结果,问题解决了.你懂的.