1

ASP.NETMVC3フォームにカスタム検証を実装しようとしています。

最初のカスタム検証は、ファイルアップロード入力でファイルが選択されている場合にのみ検証されます。

クライアント検証メソッドが1つしかない場合は、正常に機能しました。2つ目を追加しようとしたとき。2番目の検証方法はトリガーされません。

属性クラスの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">

このフォームに複数のクライアント検証メソッドがあるのに何が欠けていますか?

4

1 に答える 1

1

あなたが示したスクリプトoptions.params.paramでは、検証属性から宣言されたり渡されたりしないパラメーターを使用しているようです。したがって、現在の形式では、スクリプトは単一のルールでも機能しません。あなたはそれが機能していると言いましたが、あなたが示したものは機能する可能性がないので、コードで何かを変更したに違いないと思います.

したがって、パラメーターがない場合は、次のことができます (add adapter メソッドの 2 番目の引数として空の配列が渡されていることに注意してください)。

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;
    }
});

パラメータがある場合は、最初に属性によって返される検証ルールでそれらを宣言し、次にこの投稿に示すようにアダプタで使用する必要があります。

于 2012-06-29T06:29:01.330 に答える