企业库 验证模块的 javascript 解决方案javascript

来源:互联网 发布:http请求返回数据不全 编辑:程序博客网 时间:2024/05/29 07:44

enterprise library validation block for javascript

http://vabtojs.codeplex.com/

开始接触 enterprise library 5 是刚进公司那会。我花了两周时间把从企业库提供的功能走马观花的过了一遍。

之后,在我们的代码里用的最多的就是数据库,缓存用了一点点。

当初就想把验证这块给用上,但是搜了很多网页,没有找到如何用 javascript 来使用 vab (validation block) 的。

其实我的想法很简单,能把配置文件中的验证规则提取出来就行。无奈很长一段时间里,我都没有找到这种方法。在 entlib.codeplex.com 和 stackoverflow 里也问过,跟本就没人回复!不知道是不是 vab 真的不支持 javascript.

前两周,无意间搜到这个:

http://elvalweb.codeplex.com/

不过是用于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:'' }

]

有兴趣可以猛戳这个地址:

http://vabtojs.codeplex.com/

这个项目基于 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^)/
原创粉丝点击