Asp.net mvc ASP.NET MVC3第二个自定义验证程序方法未触发

Asp.net mvc ASP.NET MVC3第二个自定义验证程序方法未触发,asp.net-mvc,jquery-validate,asp.net-mvc-validation,Asp.net Mvc,Jquery Validate,Asp.net Mvc Validation,我正在尝试在我的ASP.NET MVC3表单上实现自定义验证 第一个自定义验证仅在文件上载输入中选择文件时进行验证 当我只有一个客户端验证方法时,它工作得很好。当我尝试添加第二个时。第二个验证方法从未触发 我的属性类中的GetValidationRules方法 public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext

我正在尝试在我的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;
}
public IEnumerable GetClientValidationRules(ModelMetadata元数据,ControllerContext上下文)
{
var规则=新ModelClientValidationRule
{
ValidationType=“文件”,
ErrorMessage=“ResumeEmptyError”。翻译(“fordia_子表单”)
};
var rule2=新ModelClientValidationRule
{
ValidationType=“扩展”,
ErrorMessage=“ResumeFileFormatError”。翻译(“fordia_子表单”)
};
var list=新列表();
增加(第2条规则);
列表。添加(规则);
退货清单;
}
我视图中的我的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>

addMethod(“文件”,函数(值,元素){
返回$('#ResumeFileName').val()!='';
});
addMethod(“扩展”),函数(值,元素){
返回$('#ResumeFileName').val()=='a';
});
jQuery.validator.unobtrusive.adapters.add(“文件”),函数(选项){
options.rules[“文件”]=options.params.param;
if(options.message){
options.messages['file']=options.message;
}
});
jQuery.validator.unobtrusive.adapters.add(“扩展”),函数(选项){
options.rules[“extension”]=options.params.param;
if(options.message){
options.messages[“extension”]=options.message;
}
});
当我查看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">


在此表单上有多个客户端验证方法,我缺少什么?

在您显示的脚本中,您似乎正在使用一些
选项.params.param
参数,该参数从未声明,也从未从验证属性传递。因此,在目前的形式下,您的脚本即使使用一条规则也无法工作。你说它是有效的,但我想你一定是改变了代码中的某些东西,因为你所展示的东西不可能有效

因此,如果您没有参数,下面是您可以做的事情(注意作为addadapter方法的第二个参数传递的空数组):


如果您有参数,则需要首先在属性返回的验证规则上声明它们,然后在适配器中使用它们,如中所示。

在您显示的脚本中,您似乎正在使用一些
选项。params.param
参数,这些参数从未声明,也从未从验证属性中传递。因此,在目前的形式下,您的脚本即使使用一条规则也无法工作。你说它是有效的,但我想你一定是改变了代码中的某些东西,因为你所展示的东西不可能有效

因此,如果您没有参数,下面是您可以做的事情(注意作为addadapter方法的第二个参数传递的空数组):


如果您有参数,则需要首先在属性返回的验证规则中声明它们,然后在适配器中使用它们,如所示。

谢谢!有时问题比你想象的更为严重!它现在起作用了!非常感谢。有时问题比你想象的更为严重!它现在起作用了!
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;
    }
});