首页新闻找找看学习计划

asp.net mvc model验证

0
悬赏园豆:10 [已解决问题] 解决于 2016-01-22 16:55

今天研究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很鸡肘,估计会浪费一定性能,灵活度还不高;

最后求高人指点迷途,感激不敬!!!

哈哈啊的主页 哈哈啊 | 初学一级 | 园豆:5
提问于:2013-09-09 23:45
< >
分享
最佳答案
0

自己来终结,大致思路就是扩展ModelValidateAttribute,并扩展IClientValidatable,然后用easui1.3.2  validatebox进行客户端验证

哈哈啊 | 初学一级 |园豆:5 | 2013-09-11 10:32

这样也可以,不过没那么好,knockout可以数据绑定和验证,ModelValidateAttribute扩展性也没那么好。

Errors,ErrorMessage最好也反馈给前端js显示。

|WinKi| | 园豆:669 (小虾三级) | 2013-09-11 13:43

@|WinKi|: 是啊,我扩展IClientValidatable,自定义了data-val-{}的前段标记,用自带的htmlhelp绑定数据,然后用easyui扩展对应的各种验证,所以只需在model加验证atrribute,然后引用自己扩展好的validate.js,就可以实现前后台验证统一

哈哈啊 | 园豆:5 (初学一级) | 2013-09-11 16:49

@哈哈啊: 不错,有了unobtrusive确实好很多了。

|WinKi| | 园豆:669 (小虾三级) | 2013-09-11 18:05

@|WinKi|: mvc自带的js好像浏览器兼容有问题把,所以我才没去研究,直接放弃了

哈哈啊 | 园豆:5 (初学一级) | 2013-09-11 20:49
其他回答(3)
0

微软的提供了两套脚本,完全满足IE7+的浏览器。有相关的配置的~

收获园豆:3
幻天芒 | 园豆:36544 (高人七级) | 2013-09-10 00:18
0

我的做法是前端做前端的验证,服务器做服务器的验证。

前端用validate.js  knockout.js等来验证,model用fluentvalidation之类的来验证。

收获园豆:4
|WinKi| | 园豆:669 (小虾三级) | 2013-09-10 09:28

那你的意思是没有用htmlhelper了?

支持(0) 反对(0) 哈哈啊 | 园豆:5 (初学一级) | 2013-09-10 09:49
0

还有一种验证方式的,你可以试试。

流畅的验证组件:FluentValidation

收获园豆:3
Cherbim | 园豆:318 (菜鸟二级) | 2013-11-03 20:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册