MVC模型验证

一、在动作方法中执行验证
Controller中使用ModelState.AddModelError()方法在验证中根据条件输出错误信息。
如: ModelState.AddModelError("UserName", "用户名不能为空");
需要注意的是,这句生成的是属性级错误,因为AddModelError的第一个参数指定的是被验证的属性名;
如果要改成模型级错误,则保持第一个参数为空,如:ModelState.AddModelError("", "用户名不能为空");

属性级错误和模型级错误
属性级错误是显示在 字段后面
模型级错误是统一显示在页面指定的位置
(自己总结:模型级错误用处就是动作方法中逻辑处理过程需要抛出的错误)
如图所示:

对应的cshtml页面代码:

Html.ValidationSummary()辅助器默认会显示所有错误,包括模型级错误和属性级错误。
重载 Html.ValidationSummary(true),boolean值为true代表只显示模型级错误,忽略属性级错误,如:

可以看到,现在它忽略了属性级错误,只会显示模型级的。

二、在模型类中执行验证
在模型类中通过 验证注解属性 来指定验证规则,验证注解属性有内建的默认模型绑定器DefaultModelBinder进行检测并强制执行。
在对模型类运用绑定过程的任何地方都会强制执行验证规则,而不只存在于个别方法中。
内建的验证注解属性有:
Compare
Range
RegularExpression
Required
StringLength

三、其他验证方式
除了以上两种之外,还有其他的方式进行模型验证,如:
1、在模型绑定器中验证;
2、创建自验证模型;
详见《精通ASP.NET MVC3框架》485页、492页

原文地址:https://www.cnblogs.com/zhaow/p/9753929.html

时间: 2024-09-27 00:05:32

MVC模型验证的相关文章

MVC模型验证:属性值无require,页面仍然验证问题

为了更清晰的说明这个问题,我使用了VS2013自动生成的MVC示例来演示,运行示例项目,点击注册页面,如图: 接下来给上面的注册增加一个“年龄条件”,找到RegisterModel,添加一个”Age”属性,但是,不加”[require]”,如图: 运行项目,回到注册页面,用户名,密码,确认密码都填,年龄项不填,点击注册,如图: 我们发现它提示 “年龄字段是必须的”,但是我并没有在 Age属性上加require属性,它怎么还会验证呢? 起初我还以为页面缓存原因,清空缓存,问题仍然存在. 于是Goo

MVC 模型验证

ASP.NET MVC框架提供了数据验证的API,称为"模型数据注解"或"模型元数据",使我们可以使用声明语法在模型中指定验证的规则,常见的验证API如下: 验证API 数据验证API 示例 说明 Compare [Compare("MyOtherProperty")] 两个属性值必须相同 Range [Range(10,20)] 属性值必须在指定的数据范围之内 RegularExpression [RegularExpression("

当ASP.NET MVC模型验证遇上CKEditor

项目需要,使用到了CKEditor编辑器.这是个很不错的富文本编辑器,但是当它绑定的字段需要进行模型验证的时候,却会出现验证失效的问题.因此本文旨在记录这个问题和给出解决办法.以下以ValidationAttribute和jQuery Validate2中验证方式为例.测试项目包含3个页面:Index.cshtml(包含2个部分视图).Add.cshtml(添加页).Companies(列表页,仅为展示数据):一个模型(Company).项目功能截图如下: -------------------

asp.net mvc 模型验证组件——FluentValidation

示例 1 using FluentValidation; 2 public class CustomerValidator: AbstractValidator<Customer> { 3 public CustomerValidator() { 4 RuleFor(customer => customer.Surname).NotEmpty(); 5 RuleFor(customer => customer.Forename).NotEmpty().WithMessage(&qu

ASP.NET MVC 4 (十) 模型验证

模型验证是在模型绑定时检查从HTTP请求接收的数据是否合规以保证数据的有效性,在收到无效数据时给出提示帮助用户纠正错误的数据. 显式模型验证 验证数据最直接的方式就是在action方法中对接收的数据验证,以下面的Model为例: public class Appointment { public string ClientName { get; set; } public DateTime Date { get; set; } public bool TermsAccepted { get; s

.Net高级进阶,WebApi和MVC进行模型验证的时候,教你如何自由控制需要进行验证的字段?

现在,你有一个MVC架构的web项目,你要完成一个注册功能. 前台传了3个值到你的控制器,分别是账号.密码.邮箱. 如图:现在你要在控制器里面判断,账号名称.密码.邮箱不能为空,并且名称和密码不超过16位. 上面这个图只是个理想中的小例子,实际开发情况是,可能一次性要传十几个字段甚至更多. 那么在实际开发中,通常为了复用性,我们将这3个参数用一个实体类来代替. 即如下所示. 注:这一步会有个知识点,叫做模型验证,不懂的童鞋可以百度下,MVC会通过一定规则自动直接将参数反序列化成所对应的实体类,但

ASP.NET MVC学习之模型验证篇

一.学习前的一句话 在这里要先感谢那些能够点开我随笔的博友们.慢慢的已经在博客园中度过一年半了,伊始只是将博客园作为自己学习的记录本一样使用,也不敢将自己的随笔发表到博客园首页,生怕自己的技艺不高,反倒成了笑话.但是随着时间的推移,再也按捺不住这种想法,于是就写了一篇随笔发表到博客园首页.让我意想不到的是有许多人都看了,而且也留下了评论.这让我鼓起勇气写了第二.三.四篇.到现在的连载,这里我希望那些从未发表过随笔的人可以尝试去发表,在这里他人不会嘲讽你,而是会给你更好的建议.说了这么多下面我们继

MVC的验证(模型注解和非侵入式脚本的结合使用)

@HtmlHrlper方式创建的标签,会自动生成一些属性,其中一些属性就是关于验证 如图示例: 模型注解 通过模型注解后,MVC的验证,包括前台客户端,后台服务器的验证,MVC统统都做了包含,即使用户在客户端禁用Javascript,服务器也会将非法操作进行验证,当前前提是针对Model实体标识了注解的情况. 要能够正常进行非空等合法性验证必须做如下步骤(前提条件): 1.必须在实体的每个类型上加上Required特性,但是数字型的属性默认已经加上了. 2.必须在视图上导入如下脚本: <scri

爱上MVC~MVC4模型验证可以放在前端

回到目录 MVC4.0推出后,在模型验证上有了一个新的改近,它支持前端验证,即在用户POST之前,如果验证失败,则Action(POST方式的)不会被执行,而直接停留在原视图,这对于用户体验是好的,它就类似于ajax验证一样,不会将原页重定向. MVC4.0在view中引用了jqueryval文件后,即可实现客户端实时验证 @section Scripts { @Scripts.Render("~/bundles/jqueryval") } 如果你不需要走JS方式验证,还是使用原来的P