0

MVC 3 と目立たない検証で VS 2010 を使用しています。入力値が許容可能であるが予期しない警告を含めるカスタム範囲バリデーターを作成しようとしています。ignore(フォームバリデーターのオプションを使用して、値をワニングで送信する機能があります)

目立たないコンポーネントは次のとおりです。

// The adapter to support ASP.NET MVC unobtrusive validation // 
$.validator.unobtrusive.adapters.add('rangewithwarning', ['min', 'max', 'wmin', 'wmax', 'warning'],
function (options) {
    options.rules['rangewithwarning'] = {
        min: options.params.min,
        max: options.params.max,
        wmin: options.params.wmin,
        wmax: options.params.wmax,
        warning: options.params.warning
    };
    options.messages['rangewithwarning'] = options.message;
});

3 つの方法に帰着するように思われる動的エラー メッセージについて広範囲に Google で検索しましたが、これらのいずれもオプションのエラー メッセージを表示できません。これらは:

  1. エラーメッセージを返す

    // The validator function
    $.validator.addMethod('rangewithwarning', function (value, element, params) {
    if (!value) {
        return true; // not testing 'is required' here!
    }
    var intValue = parseInt(value);
    // set logic here
    if (intValue >= params.wmin && intValue <= params.wmax) {
        // OK within both actual and range warning
        return true;
    }
    if (params.min <= intValue && intValue <= params.max) {
        //  outside warning but within allowed range - show warning
        return params.warning;
    }
    return $.validator.messages.rangewithwarning;
    

    });

  2. showErrors を使用する

    // The validator function
    $.validator.addMethod('rangewithwarning', function (value, element, params) {
    if (!value) {
        return true; // not testing 'is required' here!
    }
    var validator = this;
    var intValue = parseInt(value);
    // set logic here
    if (intValue >= params.wmin && intValue <= params.wmax) {
        // OK within both actual and range warning
        return true;
    }
    
    if (params.min <= intValue && intValue <= params.max) {
        //  outside warning but within allowed range - show warning
        var errors = new Object();
        errors[element.name] = params.warning;
        validator.showErrors(errors);            
    }
    
    return false;
    });
    
  3. messager関数から追加のパラメーターを返す

これらのどれも機能しませんでしたが、2 番目のメッセージをステップ実行すると、オプションのメッセージが短時間表示されてから上書きされました。

明らかな何かが明らかに欠けていますが、それが何であるかはわかりません。

前もって感謝します。

4

1 に答える 1

0

標準の range 属性を使用してから、新しい warn only 属性を使用する解決策を見つけました

(function ($) {

// The validator function
$.validator.addMethod('rangewarning', function (value, element, params) {
    var localElement = $(element);
    localElement.siblings("span").removeClass("warningOnlyDataOK")
    localElement.removeClass("warningOnlyDataOK")
    if (!value) {
        return true; // not testing 'is required' here!
    }
    var intValue = parseInt(value);
    // set logic here
    if (intValue >= params.wmin && intValue <= params.wmax) {
        // OK within both actual and range warning
        return true;
    }
    //  set display and ignore class items here etc
    localElement.siblings("span").addClass("warningOnlyDataOK")
    localElement.addClass("warningOnlyDataOK")
    return false;
});

// The adapter to support ASP.NET MVC unobtrusive validation // 
$.validator.unobtrusive.adapters.add('rangewarning', ['wmin', 'wmax'],
function (options) {
    options.rules['rangewarning'] = {
        wmin: options.params.wmin,
        wmax: options.params.wmax
    };
    options.messages['rangewarning'] = options.message;
});

} (jQuery));

このクラスwarningOnlyDataOKは、異なるスタイルのエラー メッセージを表示し、保存時にその検証を無視するために使用されます。

于 2012-12-04T16:46:32.173 に答える