8、EF模型验证

什么叫模型验证呢?

大概就是前台和后台都能使用模型来验证用户的信息是否为空或者是输入的长度是否符合标准等。

作用

方便验证,比如要验证在前台的文本框里输入的信息是否为空或者是否符合长度,前台单独验证的话就要在前台的js里获取该文本框,然后获取里面的值,判断是否为空,后台的话也是一样,接收前台传过来的用户信息,然后再进行判断,这样写如果只有一两个信息要验证到是不麻烦,但是如果有很多的值的话,那就麻烦了,要写很多if来判断,前后台都这样,就很麻烦,所以模型验证就是为了解决这个问题,只需要在EF里的表的映射里给要验证的字段加验证即可,这样前台就只需要一句代码来判断即可完成前后台的验证,而且不用把值一个一个进行判断。


更改数据库的表的数据,通过表的映射模型验证步骤

1,在要验证的表的映射里加限制,如图:


这样在使用这个表里的字段时,前台编辑获取后台提交都可以对这个对象(映射)进行验证了

2,前台验证

①引入一个网页的js,和一个本地js,前端要验证只有这样,后台的话就不用。

②前台的提交事件或者是要触发的事件里验证即可

前台验证直接提交这个表单,它会自动去验证表单里的name和这个实体里的字段名一致的去验证,所以文本框的name和表的映射应该一样,不然输入这个表单也验证不了。而且文本框必须要是html帮助类生成的,这样它的name才和映射里的一致。

③前台里放错误提示信息

这个错误信息放在你需要的位置即可,

④前台测试1

这里可以看到,当什么都不输入的时候,前台验证就会成功,并且在你放错误信息的位置弹出错误信息,我们可以看到右边,其实我们输入的这个放错误信息的方法:@Html.ValidationSummary()本身就是一个帮助类,所以在你触发了未通过验证的时候就会自动生成一个如下面右边图里的一个div

⑤前台测试2

所以我们可以根据它的class进行更改,这样它的提示信息文本就变为如上图的红色了

⑥前台测试3

更改默认样式,这样显示的就是测试1里的样式了

⑦错误信息摆放位置,

我们有时候想把错误信息写在对应的文本框后面提示,那就将之前步骤③里的那个生成全部错误信息的帮助类删掉,在你的需要有错误提示的文本框后面加上该文本框对应的提示信息的帮助类即可,如下图所示

⑧效果如下

3,后台验证

前台验证都通过了才会到后台控制器验证,除非你前台不验证,这样就能后台直接验证。


往数据库里某张表里添加数据时也可以使用验证来判断用户输入的信息是否为空

我们向数据库中的表里插入数据,前台也可以验证,

①前台这个网页同样要引入两个js,一个外部文件,一个本地文件
前台声明用户实体的model的类型,然后用html帮助类生成文本框,只有这样才能提交时验证。

②使用html帮助类生成文本框,及把错误信息的提示html帮助类写出来

③因为前台用的是表的映射来生成html,所以要使用model来为生成的html赋name值,就是为了能够和它的映射向验证,而这是添加用户,又不许生成的文本框有值,所以控制器传一个空的表的映射实例对象过来即可

④可以看到效果

⑤最后,前台验证即可

⑥测试

⑦最后后台空制器再验证即可。


总结

要使用html帮助类来根据表的映射的实例来生成html元素,这样它的name就是映射实例的字段,只有html的name和映射实例的字段名相符合才能验证。
而且提示信息也是html帮助类生成的,可以写到一块去,这样只需要写一句代码,也可以分别写,不过这样要把每个的html帮助类和都单独写出来。

下面为一些常用验证:

[Required]:必填
[StringLength(60)]:字符串长度验证,最大60
[StringLength(50, MinimumLength = 6)]:字符串长度验证,最小6最大50
[Range(35,44)]:范围
[Range(typeof(Decimal), "0", "100", ErrorMessage = "{0} 必须是数字介于 {1} 和 {2}之间.")]:范围跟上错误提示
[Range(typeof(decimal), "0.00", "49.99")]:小数的范围
[RegularExpression(@”[A-Za-z0-9._%+-]+")]:正则的验证
[Compare("Password",ErrorMessage="密码要一致")]:进行两个值比较,比如用于密码是否相同
[Remote("CheckUserName", "Register", ErrorMessage = "用户名已被注册")]:远程验证
前台自定义验证
// 全空格验证
$.validator.addMethod("isBlank", function (value, element) {
    var blank = /^[ ]*$/;
    return this.optional(element) || !(blank.test(value));
}, "不能全输入空格");
posted @ 2022-01-10 21:11  青仙  阅读(307)  评论(0编辑  收藏  举报