İhs*_*ali 1 c# validation asp.net-mvc asp.net-mvc-4
假设我有一个视图模型.它有一个必需的Name财产.我已经禁用了客户端验证.我的动作方法中有这个代码:
if (!ModelState.IsValid)
{
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
所以,一切正常.它会在发布后突出显示所需的字段.但是,我无法理解哪个jQuery validaion函数执行此过程?如何,jQuery Validation检测到表单已提交一次?
我想找到那个代码,因为我想稍微改一下.例如,我有自己的助手,它有自定义验证逻辑.目前,我的自定义助手验证在无效的Post之后没有显示.并且,我想将我的逻辑添加到内置函数中,我无法在任何地方找到它.
小智 5
首先,如果您已禁用客户端验证,则jquery验证与它无关(您已禁用它!).简要说明发布和返回视图时会发生什么.
DefaultModelBinder初始化您模型的新实例DefaultModelBinder然后读取表格数据(名称/值对),并且如果属性名称相匹配的形式的数据值中的一个,它的属性设置(假设其有效)和它的值也被添加到
ModelState.如果该值无效,则不会设置该属性,但会将其值与ModelState(attemptedValue)一起添加到ModelState错误中@Html.ValidationMessageFor()方法将读取ModelState值,如果存在与该属性关联的错误,则会将错误消息添加到ValidationMessageFor()方法生成的html中,并添加相关的类名(突出显示它)如果要查看有关这些工作方式的更多详细信息,可以检查DefaultModelBinder和ValidationExtensions的源代码.
至于"我想找到那个代码,因为我想稍微改变它",然后不要.您没有说明您要执行的操作,或者显示了您的html帮助程序扩展方法的任何代码,但是html帮助程序没有(也不应该)包含验证逻辑.他们负责根据属性和应用于该属性的验证属性生成html.
如果您有属性的自定义验证逻辑,那么您创建一个继承自ValidationAttribute的属性(如果您还需要客户端验证,那么它还需要实现IClientValidatable).本文是创建自己的验证属性的一个很好的指南.
| 归档时间: |
|
| 查看次数: |
667 次 |
| 最近记录: |