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

我对动态错误消息进行了广泛的搜索,这似乎归结为三种方法,但这些方法都不允许我显示可选的错误消息。这些都是:

  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从函数返回一个附加参数

这些都不起作用,尽管在逐步执行第二个时,可选消息被短暂显示然后被覆盖。

我显然遗漏了一些明显的东西,但看不到它是什么。

提前致谢。

4

1 回答 1

0

找到了一个使用标准范围属性的解决方案,然后使用我的新警告属性跟随它

(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 回答