0

我使用VS 2010與MVC 3和不顯眼的驗證。我正在嘗試創建一個自定義範圍驗證程序,以包含輸入值可接受但意外的警告。 (我有工作的功能,通過使用ignore選項的形式驗證的提交與wanings值)我需要一個自定義錯誤消息的jQuery自定義驗證器

不顯眼的部分是:

// 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函數

無這些工作通過第二個步進時雖然表現出短暫然後覆蓋的可選的消息的附加參數。

我明顯錯過了一些明顯的東西,但看不到它是什麼。

在此先感謝。

+0

還有一個想法 - 是否有可能在一個字段上有多個驗證器。在這種情況下,這可以分成一個範圍驗證器和一個自定義範圍驗證器? –

回答

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既用於顯示不同的風格的錯誤消息,並且忽略驗證保存。