小弟新手,在群里问的 说 model的属性验证有的说是前台验证,有的说是后台验证。
说前台验证的理由是:用model属性 必须引用vs的那个验证js,如果不引用就不管用了,但是如果是属于前台验证的话,为什么 控制器后台代码还有这句话: if (ModelState.IsValid) 莫非,微软又搞成了以前的服务器控件类似的东东吗??
如果mode验证输入后台验证的话,那我想自己添加js验证代码或验证插件,类似web form的用法一样,但是mode验证也有前台提示,是不是不用erromessage 那个错误信息提示就可以了呢?、
==============
看来只有自己试了才知道答案啊,明明是后台
model属性上加的某些过滤器,或者属性类型本身,asp.net mvc框架可以自动生成前台jQueryValidate验证工具的验证语法, 并且,这些过滤器,在后台也会经过"模型绑定"这一关的验证 .
所以,正常情况下,前后台会分别分进行一次验证 , 前台验证,是通过jQueryValidate拦截表单的提交动作,检查input上绑定的验证规则,后台验证则是发生在"模型绑定"这一环节,
当然,你也可以在后台主动进行一些验证,并通过ModelState.AddModelError("",""),添加一些属性对应的错误提示消息.
这个机制, 就算你前台没有引入jQueryValidate,同样会触发后台的验证并抛出错误消息.
前台验证是为了减少后台的工作负荷,把注定要失败的提交,阻止在前台.
后台验证则是最最最最最最最最必须的 , 我觉得 "任何时候 ,都不要轻易相信来自客户端的提交, 必须经过后台的验证"
另外补充一个. 您上面提到的"必须引用vs的那个验证js". 是jQueryValidate
它本身是一个第三方的开源库,并非vs或微软的
谢谢回复,我试了 去掉jQueryValidate,后台一样是可以验证,如果我不用jQueryValidate的验证,因为他的验证样式感觉不好看,比如我自己增加个弹出提示什么的,自己写jquery 前台验证,后台还是用model模型验证,但是不写erromessage错误提示 也算是前后台都有验证了吧
@efreer: 当然算 , 如果有这个必要的话 :)
正确答案是前后端都验证了 前端必须引用js验证 后端验证是发生在模型绑定期间
所谓模型绑定期间就是 通过form表单 提交值的时候 它会在请求提交的值时候验证 其它不会验证 比如我直接在后台传递一对象是不会发生验证的 不信可以测试下
都验证了吧?客户端验证是不可靠的,这基本算是一个原则。。。
model验证就是后端验证,前端的验证那是因为引用了插件jQueryValidate配合mvc HTMLHelper里的ValidationMessageFor
进行验证,其实前端最后代码跟自己写js验证是一样的,可以运行之后查看页面源码.
前后台都必须验证
前端:要知道,用户是不懂计算机的,操作中有不规格的数据,要及时提示给用户,而不是填完所有内容后提交到服务器,让服务器返回提示,不仅不及时,还容易造成已填写数据丢失,网上注册,填写完账号,焦点离开后,就提示绿勾或者红字被占用
后端:不用说了,数据规格要求(如数据库int字段是不能存入abc的),各种输入性攻击等等,必须做的
前台后台都有验证。
这个是后台,但js本身就带有验证
model里面的是验证后台
同时配合 validate.js 验证前台