继本文后,对自定义属性执行客户端验证
我试图了解如何执行此操作,将其他参数传递给客户端脚本
据我所知,到目前为止,使用MVC 3实现自定义验证需要以下内容
基于ValidationAttribute并实现IClientValidatable.我还看到了一些源自ModelValidator的示例,它似乎实现了ValidationAttribute和IClientValidatable的功能.所以这是关于差异是什么或者ModelValidator是否在MVC 2中使用但现在已被弃用或者是什么的第一个混淆点?
必须从GetClientValidationRules()返回ModelClientValidationRule的实例以指定详细信息,例如错误消息,ValidationType(我理解为将执行客户端验证的Javascript函数的名称)以及属性的任何其他自定义参数可能有,并且需要传递给Javascript验证.
我假设运行时(不确定它的哪一部分)然后使用ModelClientValidationRule标签元素生成html属性,如下所示:
data-val="true" (to indicate that the element requires validation)
data-val-[ValidationType]=[ErrorMessage]
data-val-[ValidationType].[ValidationParameters(n).Key]=[ValidationParameters(n).Value]
Run Code Online (Sandbox Code Playgroud)
必须使用jQuery.validators.addmethod()创建Javascript函数并将其添加到jQuery.validators,以便JQuery在需要执行时知道它.就像是:
jQuery.validator.addMethod(
'greaterThan',
function (value, element, params) {
/.../
return /* true or false */ ;
},
''
);
Run Code Online (Sandbox Code Playgroud)
我的问题是签名'function(value,element,params)'是否是处理验证的方法的标准,我认为它将在适当的时候被某些jQuery功能调用,例如在提交表单之前或者element会丢失fuces或keyUp事件.我只是不知道如何控制这个,即选择适合自定义验证的事件.
这将不显眼的属性转换为; 我不太清楚,但认为它是一个jQuery规则,但我不清楚这些是如何工作的.就像是
jQuery.validator.unobtrusive.adapters.add(
'futuredate',
{ },
function (options) {
options.rules['greaterThan'] = true;
options.messages['greaterThan'] = options.message;
}
);
Run Code Online (Sandbox Code Playgroud)
我的问题是'功能(选项)'.这是在'function(value,element,params)'之前调用的函数,负责将不显眼的标记提取到jQuery.Validation可以理解的数据结构中.从代码示例中我可以看出,options是一个对象,它包含来自标记的属性值(例如options.message)和它必须映射到的jQuery相关属性(例如options.messages ['ClientSideValidationFunctionName']如果是这样,如何检索和映射自定义参数.
我希望我没有添加任何额外的困惑.