enterprise library validation block for javascript
开始接触 enterprise library 5 是刚进公司那会。我花了两周时间把从企业库提供的功能走马观花的过了一遍。
之后,在我们的代码里用的最多的就是数据库,缓存用了一点点。
当初就想把验证这块给用上,但是搜了很多网页,没有找到如何用 javascript 来使用 vab (validation block) 的。
其实我的想法很简单,能把配置文件中的验证规则提取出来就行。无奈很长一段时间里,我都没有找到这种方法。在 entlib.codeplex.com 和 stackoverflow 里也问过,跟本就没人回复!不知道是不是 vab 真的不支持 javascript.
前两周,无意间搜到这个:
不过是用于mvc的,看了一下它是如何从配置文件中提取配置的代码,豁然开朗。
早在07年的时候,我就写过一个 formvalidation 的 js 代码,直到现在我还在不断的修改,可以说,它以经相当完善了。这次我就是把 vab 的验证器提取为 formvalidation 使用的规则格式:
[
{ name:'txtname' , type:'and' , msg:'' , tag:'' , subrule:[
{ name:'txtname' , required:true , type:'length' , min:2 , includemin:true , max:20 , includemax:true , msg:'' , tag:'' },
{ name:'txtname' , required:true , type:'regex' , regex:/^(xling|admin)$/ , negated:true , msg:'' , tag:'' }
]
},
{ name:'txtbirthday' , required:true , type:'relativedatetime' , min:-50 , minunit:'' , includemin:true , max:-10 , includemax:true , maxunit:'' , servertime:'2011-07-16 16:13:19' , msg:'' , tag:'' },
{ name:'txtemail' , type:'or' , msg:'invalid email address. (optional)' , tag:'' , subrule:[
{ name:'txtemail' , required:false , type:'regex' , regex:/\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/ , msg:'' , tag:'' }
]
},
{ name:'txtproject1' , required:true , type:'length' , min:2 , includemin:true , max:20 , includemax:true , msg:'' , tag:'' },
{ name:'txtproject2' , required:true , type:'length' , min:2 , includemin:true , max:20 , includemax:true , msg:'' , tag:'' },
{ name:'txtscore1' , required:true , type:'range' , min:0 , includemin:true , max:150 , includemax:true , msg:'' , tag:'' },
{ name:'txtscore2' , required:true , type:'range' , min:0 , includemin:true , max:150 , includemax:true , msg:'' , tag:'' }
]
有兴趣可以猛戳这个地址:
这个项目基于 entlib 5.0 里的验证模块(vab)。它实现了vab到 javascript 的转换。
它首先会跟据配置文件中的验证规则,生成对应的 javascript 验证规则,并配合 entlibvalidation.js 来验证用户输入, 注意:不是用 ajax 验证 。
目前支持以下几种验证器:
and composite
or composite
contains characters
date time range
domain
not null
object
property comparison
range
regex
relative date time
string length
不支持以下几种验证器:
custom
enum conversion
object collection
type conversion
and and or composite validator
这两个验证器把子验证器提取为子规则
domain validator
呈现为正则验证器
notnull validator
如果在 and 和 or 规则的子规则中,存在 not null 验证器,且它的 negated 属性是 true, 那么其它子验证器将会添加一个 required = false 的规则。
object validator
object 验证器跟据 target ruleset ,提取子验证器,并合并到主线上。
relative datetime validator
增加了一个 servertime 的规则。这个规则如果省略,将会以客户端的当前时间为为基准。
如何使用:
1,绑定:
protected void page_load(object sender , eventargs e) {
var builder = new mapbuilder ( );
builder.map ( l => l.name , txtname )
.map ( l => l.birthday , txtbirthday )
.map ( l => l.email , txtemail )
//.map(l=>l.sex, rblsex)
.map ( l => l.scores.project , txtproject1 )
.map ( l => l.scores.score , txtscore1 )
.map ( l => l.scores.project , txtproject2 )
.map ( l => l.scores.score , txtscore2 );
this.rules = validationhelper.getclientrules ( typeof ( studententity ) , "addstudent" , builder.maps );
}
2,引用 js 文件:
3,修改 form (不限于这种方式)
4, js 代码
这里的 customvalidhelper 可随便修改
提供了4种验证模式:
1, check all , then alert all error. 全部检查,并alert
2, check one by one , if have error , stop check . 一个一个检查,如果有错误,停止检查。
3, check all , if pass , call onpassfun, if failed, call onunpassfun 调用自定义事件 onpassfun验证通过时调用,onunpassfun未通过时调用。
4, check one by one , when pass or unpass invokde callback. 同3,但是当验证不通过时,立即停止向下检查。
目前 javascript 文件改动比较大,还存在一些 bug 没有测到。
如果您代为测试,请不要吝惜您的笔墨。
谢谢。
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/