我正在尝试在ASP.NET MVC3表单上实现自定义验证。
第一个自定义验证仅验证文件上传输入中是否已选择文件。
当我只有一个客户端验证方法时它工作正常。当我试图添加第二个。永远不会触发第二种验证方法。
我的属性类中的GetValidationRules方法
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule
{
ValidationType = "file",
ErrorMessage = "ResumeEmptyError".Translate("fordia_subform")
};
var rule2 = new ModelClientValidationRule
{
ValidationType = "extension",
ErrorMessage = "ResumeFileFormatError".Translate("fordia_subform")
};
var list = new List<ModelClientValidationRule>();
list.Add(rule2);
list.Add(rule);
return list;
}
我的观点中的javascript代码
<script type="text/javascript">
jQuery.validator.addMethod("file", function (value, element) {
return $('#ResumeFileName').val() != '';
});
jQuery.validator.addMethod("extension", function (value, element) {
return $('#ResumeFileName').val() == 'a';
});
jQuery.validator.unobtrusive.adapters.add("file", function (options) {
options.rules["file"] = options.params.param;
if (options.message) {
options.messages['file'] = options.message;
}
});
jQuery.validator.unobtrusive.adapters.add("extension", function (options) {
options.rules["extension"] = options.params.param;
if (options.message) {
options.messages["extension"] = options.message;
}
});
</script>
当我查看我的HTML源代码时,我的输入元素上有以下HTML属性:
<input data-val="true" data-val-extension="Erreur: format error" data-val-file="Required" id="Resume" name="Resume" type="file" value="" class="input-validation-error">
在此表单上有多个客户端验证方法我缺少什么?
答案 0 :(得分:1)
在您显示的脚本中,您似乎正在使用某些options.params.param
参数,该参数从未声明,也不会从验证属性传递。因此,就目前的形式而言,即使使用单一规则,您的脚本也不会起作用。你说它工作正常,但我想你必须在代码中改变一些东西,因为你所展示的东西没有工作的机会。
因此,如果您没有参数,那么您可以做什么(注意作为第二个参数传递给添加适配器方法的空数组):
jQuery.validator.addMethod("file", function (value, element) {
return $('#ResumeFileName').val() != '';
});
jQuery.validator.unobtrusive.adapters.add("file", [], function (options) {
options.rules["file"] = options.params;
if (options.message) {
options.messages['file'] = options.message;
}
});
jQuery.validator.addMethod("extension", function (value, element) {
return $('#ResumeFileName').val() == 'a';
});
jQuery.validator.unobtrusive.adapters.add("extension", [], function (options) {
options.rules["extension"] = options.params;
if (options.message) {
options.messages["extension"] = options.message;
}
});
如果你有参数,你需要先在属性返回的验证规则上声明它们,然后在适配器中使用它们,如this post所示。