今天研究asp.net mvc model验证很纠结,研究路线如下:
一.用mvc自带的validate属性,发现指定DataType=DataType.Email后,用EditorFor生成input标记type=email,这明摆着弃低端浏览器不顾,而且jquery.validate.js发现在ie8下无效;于是放弃之;
二.自己扩展validate属性进行服务器验证;用TextboxFor等等之类生成input标记,然后引用第三方库客户端验证,发现TextBoxFor加html属性时属性名称不能包含特殊字符了,例如: “@Html.TextBoxFor(model => model.Email, new { @data-option="" })”
所以,现在想到的问题是:
1.对于第一种方法用自带的validate属性,然后控制EditorFor生成标记里的属性,目前貌似没找方法去改;
2.对于第二种方法,有没有办法加data-option这样带特殊字符的属性;
3.我想到的是自己扩展Htmlhelper,然后根据自己扩展的validate属性生成对应的客户端验证属性,貌似自己也没找到方法;
4.以上如果都行不通,果断删除HtmlHelper,纯手工码html;
也许是自己道行不深,还是吐槽下,感觉Htmlhelper很鸡肘,估计会浪费一定性能,灵活度还不高;
最后求高人指点迷途,感激不敬!!!
自己来终结,大致思路就是扩展ModelValidateAttribute,并扩展IClientValidatable,然后用easui1.3.2 validatebox进行客户端验证
这样也可以,不过没那么好,knockout可以数据绑定和验证,ModelValidateAttribute扩展性也没那么好。
Errors,ErrorMessage最好也反馈给前端js显示。
@|WinKi|: 是啊,我扩展IClientValidatable,自定义了data-val-{}的前段标记,用自带的htmlhelp绑定数据,然后用easyui扩展对应的各种验证,所以只需在model加验证atrribute,然后引用自己扩展好的validate.js,就可以实现前后台验证统一
@哈哈啊: 不错,有了unobtrusive确实好很多了。
@|WinKi|: mvc自带的js好像浏览器兼容有问题把,所以我才没去研究,直接放弃了
微软的提供了两套脚本,完全满足IE7+的浏览器。有相关的配置的~
我的做法是前端做前端的验证,服务器做服务器的验证。
前端用validate.js knockout.js等来验证,model用fluentvalidation之类的来验证。
那你的意思是没有用htmlhelper了?