MVC 模型注解验证

首先建一个空的解决方案 然后建 Visual C# / Web / ASP.NET MVC 4 Web 应用程序

然后在 MVC 的 Models 文件夹里 建一个类 例如 UserInfo

引用命名空间
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

类里面代码:

[DisplayName("用户名"), Required(ErrorMessage = "用户名非空"),
StringLength(int.MaxValue, MinimumLength = 2, ErrorMessage = "用户名必须大于2")]
[System.Web.Mvc.Remote("CheckUserName", "Test01", HttpMethod = "post", ErrorMessage = "用户名已存在")]
public string UserName { get; set; }
[DisplayName("密码"), StringLength(int.MaxValue, MinimumLength = 6, ErrorMessage = "密码必须大于6")]
public string Password { get; set; }
[DisplayName("再次输入密码"), Compare("Password", ErrorMessage = "确认密码与原始密码不一致")]
public string ConfirmPassword { get; set; }
[DisplayName("年龄"), Range(1, 120, ErrorMessage = "年龄必须在1到120岁之间")]
public int Age { get; set; }
[DisplayName("邮箱"), RegularExpression(@"^\[email protected]\w+.\w+$", ErrorMessage = "Emial不合法")]
//[EmailAddress]
public string Email { get; set; }

建一个控制器 并在 Action里添加一个刚建的 UserInfo 类的强类型视图

视图中 嵌入 3 个引用
<link href="~/Content/Site.css" rel="stylesheet" />
<script src="~/Scripts/jquery-1.7.1.js"></script>
<script src="~/Scripts/jquery.validate.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.js"></script>

创建表格
<div>
<form action="/Test01/Add" method="post">
@Html.DisplayNameFor(c => c.UserName)
@Html.TextBoxFor(c => c.UserName)
@Html.ValidationMessageFor(c => c.UserName)
<br />
@Html.DisplayNameFor(c => c.Password)
@Html.PasswordFor(c => c.Password)
@Html.ValidationMessageFor(c => c.Password)
<br />
@Html.DisplayNameFor(c => c.ConfirmPassword)
@Html.PasswordFor(c => c.ConfirmPassword)
@Html.ValidationMessageFor(c => c.ConfirmPassword)
<br />
@Html.DisplayNameFor(c => c.Age)
@Html.TextBoxFor(c => c.Age)
@Html.ValidationMessageFor(c => c.Age)
<br />
@Html.DisplayNameFor(c => c.Email)
@Html.TextBoxFor(c => c.Email)
@Html.ValidationMessageFor(c => c.Email)
<br />

<input type="submit" value="注册" />
</form>
</div>

如何判断用户名已经存在 例如 张三

再在这个控制器里建在建一个Action 特别注意:此处建的Action 必须按照前面实体类里面的

[System.Web.Mvc.Remote("CheckUserName", "Test01", HttpMethod = "post", ErrorMessage = "用户名已存在")]

否则没用

里面代码:
string name = Request.Form["UserName"];
if (name == "张三")
{
return Content("false");
}
return Content("true");

1、模型注解,用来检查表单中元素的合法性,效果类似于前面学过的 formvalidate.js插件
命名空间: using System.ComponentModel; 下面存储了
1、DisplayName():标记属性要显示的名称 配合视图上面的 @Html.DisplayNameFor(c=>c.属性名称)来显示
命名空间: using System.ComponentModel.DataAnnotations; 下面存储了
1、Required :用来做非空验证检查,特点:在非字符串类型属性上会自动加上 Required 特性标签,如果是字符串类型必须手动添加
2、StringLength :用来检查字符串类型的属性的长度验证
3、Range:用来检查数值(int,decimal,double,float)类型的属性的范围验证
4、Compare:用来比较两个属性的值是否一致,一般用于确认密码属性上
5、[RegularExpression("\\d+", ErrorMessage="年龄必须是一个数值")]:约束此属性的值必须是一个数值

命名空间: using System.ComponentModel.DataAnnotations; 下面存储了
1、Remote("请求的action名称","控制器名称",HttpMethod = "post/get(一般推荐使用post请求来防止ajax的缓存)",ErrorMessage = "提示文本"):会发出一个ajax请求到某个控制器中的某个 action进行检查操作,如果存在则返回字符串的 false (注意不能使用大写的False,如果使用了则不能正常调用)
表示此值已经存在不能再使用,否则返回true(注意不能使用大写的True,如果使用了则不能正常调用) 表示可以使用
[System.Web.Mvc.Remote("CheckUserName" //代表的是请求的action名称
,"Home" //代表控制器名称
,HttpMethod="post" //表示发出post的ajax异步请求,主要是为了防止ajax请求的缓存,如果使用get可能出现结果不准确
,ErrorMessage="此值已经被使用,请重新跟换") //表示如果服务器返回的是false字符串,则提醒用户
]

使用Required 进行页面元素的合法性验证步骤:
1、在实体属性上打上[Required(ErrorMessage="Name属性非空")]
2、在视图页面上 利用@Html.TextBoxFor(c=>c.Name) :用来生产文本框,同时给文本框架加上 data-val="true" data-val-*......
3、在视图页面上 利用@Html.ValidationMessageFor(c=>c.Name) 用来显示提示文本的
4、引用三个js脚本
<script src="~/Scripts/jquery-1.7.1.js"></script>
<script src="~/Scripts/jquery.validate.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.js"></script>

5、注意:元素必须放到表单中 <form> 标签才能起验证作用

6、检查MVC网站跟目录下面的web.config中的<appSettings>节点中的两个节点
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
的值必须为true,才能骑验证作用,否则任何一个关闭都不起作用

什么叫做非嵌入式脚本(非侵入式脚本)~/Scripts/jquery.validate.unobtrusive.js
没有在视图上写一个验证的代码就完成表单元素的验证功能,仅仅只是利用了相关的脚本来完成,这个就叫做非嵌入式

时间: 2024-10-12 02:43:03

MVC 模型注解验证的相关文章

MVC模型注解

首先,model是通过ef自动是生成的实体. 添加模型注解的意思就是在注册的时候自动验证用户所填信息是否符合我们规定的要求(这是我们做这个例子的要求) 首先给大家先展示一下效果吧. 然后Email是点击注册之后才能看到效果的 现在就跟我一起回忆下过程吧 实体我们就不再说了,不管你用什么方法创建,我们现在说说添加模型注解: 首先添加一个类,然后加上两个重要的命名空间的引用: using System.ComponentModel; using System.ComponentModel.DataA

ASP.NET MVC模型部分验证

在很多情况下,我们为了代码的复用可能会存在ViewModel共用的情形.比方说,web应用中常常会遇到的一个需求就是用户找回密码的功能.用户首先要验证通过验证邮箱(通常是用户名)来获取验证码,然后再进行密码重置.那么此时假设需要4个字段:Email.Password.ConfirmPassword.VerifiCode.那么就需要2个单独的页面中队这一个model进行分步验证了.google了一下,发现了一些有价值的解决方案.为了说明问题,写了一个小的Demo如下: ViewModel: pub

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

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

MVC中的模型注解

authour: chenboyi updatetime: 2015-04-26 21:28:42 friendly link:   目录: 1,思维导图 2,内容解析 3,CodeSimple 1,思维导图 2,内容解析 //模型注解 2.1.DisplayName(“程序员自定义文字”)配合 @Html.EditorForModel(),  @Html.DisplayNameFor(),               @Html.LabelFor(),@Html.ValidationMessa

Asp.net MVC 数据注解与验证

数据注解特性定义在名称空间System.ComponentModel.DataAnnotations中(有些特性定义在其他名称空间中),它们提供了服务器端验证的功能,当在模型的属性上使用这些特性时,框架也支持客户端验证. 常用特性 1.Required --必填字段示例:[Required]2.StringLength --字符长度限制示例:[StringLength(16,MinimumLength=3)]3.RegularExpression --正则表达式验证示例:[RegularExpr

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

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

MVC WebApi 用户验证 (2)

构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(66)-MVC WebApi 用户验证 (2) 前言: 构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(65)-MVC WebApi 用户验证 (1) 回顾上一节,我们利用webapi简单的登录并进行了同域访问与跨域访问来获得Token,您可以跳转到上一节下载代码来一起动手. 继续上一篇的文章,我们接下来演示利用拿到的Token来访问接口,管理接

MVC中数据验证

http://www.studyofnet.com/news/339.html http://www.cnblogs.com/kissdodog/archive/2013/05/04/3060278.html 本文导读:ASP.NET MVC3中的Model是自验证的,这是通过.NET4的System.ComponentModel.DataAnnotations命名空间完成的. 我们要做的只是给Model类的各属性加上对应的验证标记(Attributes)就可以让MVC3框架帮我们完成验证.下面

构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(66)-MVC WebApi 用户验证 (2)

前言: 构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(65)-MVC WebApi 用户验证 (1) 回顾上一节,我们利用webapi简单的登录并进行了同域访问与跨域访问来获得Token,您可以跳转到上一节下载代码来一起动手. 继续上一篇的文章,我们接下来演示利用拿到的Token来访问接口,管理接口,利用系统权限管理接口,对每个接口进行授权(管理接口为选读部分,因为你需要阅读最开始权限管理部分(18-27节),才能阅读这部分) 开发环境: V