这篇文章,我将会说到,使用数据注解应用程序接口来进行服务端验证ASP .NET MVC框架在执行的时候,验证所有传递到控制器的数据,如果验证失败就把错误消息,填充到模型状态对象中,并且把这个对象传递给控制器,然后控制器中的方法,根据Modelstate的状态来判断,是否验证失败还是验证通过。
在这里,我将会使用两种方法来验证数据的合法性,一个是手动添加错误消息到模型状态对象中,另外一个方法是使用数据注解【数据标注】API,来做。
先来看看使用手动验证的方式吧:
我们新建一个空白的手动音量调节项目:添加一个学生实体:
使用系统;使用系统。集合。通用;使用系统Linq .使用系统网络.命名空间服务器端验证.模型{公共类学生{公共字符串名称{ get设置;}公共字符串电子邮件{ get设置;} }}然后添加一个学生控制器:
使用服务器端验证。模型;使用系统;使用系统。集合。通用;使用系统Linq .使用系统。文本。正则表达式;使用系统网络.使用系统网络。手动音量调节命名空间服务器端验证.控制器{公共类学生控制器:控制器{//GET:学生公共行动结果索引(){ return View();}[httpset]公共行动结果索引(学生模型){ //服务端验证,方法一,手动添加错误消息到模型状态对象中//如果名字是空的如果(字符串IsNullOrEmpty(模型。名称)){ ModelState .addmodelarror(' Name ',' Name '是必需的);} //如果电子邮件是空的如果(字符串IsNullOrEmpty(模型。电子邮件)){ ModelState .AddModelError("电子邮件","电子邮件是必需的");} else { string emailregex=@'^([a-za-z0-9_-.] )@(([[0-9]{1,3}' @'.[0-9]{1,3}.[0-9]{1,3}.)|(([a-zA-Z0-9-] ' @ ' .)))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$';Regex re=new Regex(EmailRegex);//电子邮件不为空的时候,但格式不合法if(!关于.IsMatch(模型。电子邮件)){ ModelState .' AddModelError('电子邮件','电子邮件无效');} } //实体验证通过if (ModelState .IsValid){ viewpag .名称=型号。名称;视图包。电子邮件=模型。电子邮件;}返回视图(模型);} }}创建索引视图:
@ model Server _ Side _ Validation _ IN _ MVC .模型。学生@{布局=空;}!DOCTYPE HTMl HTMl head meta name=' viewport ' content=' width=device-width '/TItle INDEX/TItle/head body div @使用(Html .begin inform()){//使用视图数据模型状态。IsValid来判断模型状态的状态if(视图数据.模型状态。IsValid){ if(viewpag .名字!=null){ Name:@ViewBag.Namebr/电子邮件: @ viewpag .email } }字段集legendStudent/legend div @ *生成标签标签*@ @Html .标签(型号=型号.名称)/分区@*生成文本框*@ @Html .编辑(模型=模型.名称)@*不合法*@ ////@if(!视图数据模型状态。IsValid)//这样写有问题正确的写法:@if(!视图数据。模型状态。是有效的视图数据模型状态['电子邮件']。错误。计数0){//从字典中获取错误消息:@ViewData .模型状态['名称']。错误[0]。错误消息span style=' color : red ' @ ViewData .模型状态['名称']。错误[0]。ErrorMessage/span } /div div @Html .标签(型号=型号.电子邮件)/div @ Html .编辑(模型=模型.Email) /////@if(!视图数据模型状态。IsValid)这样写有问题: //正确的写法在下面@if(!视图数据。模型状态。是有效的视图数据模型状态['电子邮件']。错误。计数0){//从字典中获取错误消息:@ViewData .模型状态['电子邮件']。错误[0]。错误消息span style=' color : red ' @ ViewData .模型状态['电子邮件']。错误[0]。错误消息/span } /div p输入类型="提交"值="创建"//p/字段集}/div/正文/html然后,修改一下默认的路由:
公共静态无效注册路由(常规选择路由){路线.忽略重路由(' {resource}).axd/{ * PathInfo } ');路线. MapRoute(名称:“Default”,URL :“{ controller }/{ action }/{ id }”,Default s 3360 new { controller=“Student”,action=“Index”,id=UrlParameter .可选});}运行之后,报错。查找了一下原因,修改了一下视图代码:
运行之后,
接着验证一下,名称不为空,电子邮件输入非法格式的数据:
最后验证一下,输入合法的数据:
好了,现在看看第二种方式,使用数据注解来进行服务端验证:新建一个类:避免混淆,
使用系统;使用系统。集合。通用;使用系统。组件模型。数据注释;使用系统Linq .使用系统网络.命名空间服务器端验证.模型{公共类学生服务器{[必需的(错误消息='名称为必填项)]公共字符串名称{ get设置;}[必需(错误消息='电子邮件必须)][电子邮件地址(错误消息='电子邮件格式不对)]公共字符串电子邮件{ get设置;} }}在控制器中新建两个方法:
公共操作结果sever side index(){ return View();}[httpset]公共操作结果服务器端索引(学生服务器模型){ if (ModelState .IsValid){ viewpag .名称=型号。名称;视图包。电子邮件=模型。电子邮件;}返回视图();}对应的视图:
@ model Server _ Side _ Validation _ IN _ MVC .模型。学生服务器@{布局=空;}@if (ViewData .模型状态。IsValid){ if(viewpag .名字!=null){ name : @ viewpag .姓名br/电子邮件: @ viewpag .Email }}!DOCTYPE htmlhtmlhead元名称=' viewport ' content=' width=device-width '/title服务器端索引/title/head body div @使用(Html .begin inform()){ @ Html .ValidationSummary(true)字段集legendStudent/legend div @ Html .标签(型号=型号.名称)/div @ Html .编辑(模型=模型.名称)@Html .ValidationMessageFor(model=model .名称)/div @ Html .标签(型号=型号.电子邮件)/div @ Html .编辑(模型=模型.电子邮件)@Html .ValidationMessageFor(model=model .电子邮件)/div/p输入类型="提交"值="创建"//p/字段集}/div/body/html
首先验证,都为空的情况:
名字不为空,电子邮件为空
名字不为空,电子邮件输入非法格式数据
两个都输入合法的数据:
好了,以上就是手动音量调节中服务端验证了,我们一般是使用第二种,来进行验证。也就是数据注解。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。