在DataAnnotation范围属性客户端验证之旅(client-side validation

2019-07-19 23:12发布

我在我的模型类下面的代码:

    [Range(1, 100)]
    public decimal Price { get; set; }

最近jquery.validate的升级(我假设)到1.11.0之后,我越来越即使我输入有效的值时发生错误。 如果我在web.config中关闭客户端验证 - 工作正常。 所有其他属性(StringLength,必需)做工精细。 生成的HTML如下(增加了清晰度换行符):

<input class="text-box single-line" data-val="true" 
data-val-number="The field Price must be a number." 
data-val-range="The field Price must be between 1 and 100." 
data-val-range-max="100" data-val-range-min="1" 
data-val-required="The Price field is required." id="Price" name="Price" 
type="text" value="" />

我敢肯定之前......可没想到的任何东西,但在jquery.validate的bug,它的工作。

Answer 1:

我们正与jQuery.validate 1.11.0和Microsoft.jQuery.Unobtrusive.Validation 2.0.30116.0同样的问题。 某处在验证库更新,这个数字打破了验证。

目前有关这个问题GitHub的问题跟踪一个开放的问题: https://github.com/jzaefferer/jquery-validation/issues/626

引自这一问题:

返回this.optional(元件)|| (值> =参数[0] &&值<=参数[1]);

因为这条线检查字符串,而不是数字。 如果我有30和200之间的范围内,并且我想验证120,则该字符串120是较小然后串30。

该行必须是这样的:

返回this.optional(元件)|| (数(值)> =编号(PARAM [0])&&号(值)<=号码(PARAM [1]));

我已经改变了我jquery.validate.js的副本:

// http://docs.jquery.com/Plugins/Validation/Methods/range
range: function( value, element, param ) {
    return this.optional(element) || (value >= param[0] && value <= param[1]) || (Number(value) >= Number(param[0]) && Number(value) <= Number(param[1]));
},

现在的范围内操作的工作与使用DataAnnotations预期:

[Range(1, 100)]
public decimal Price { get; set; }


Answer 2:

微软发布的更新microsoft.jQuery.Unobtrusive.Ajax和microsoft.jQuery.Unobtrusive.Validation(从版本“2.0.20710.0”到“2.0.30116.0”),修复双方 .live和验证问题



Answer 3:

这种情况的发生,因为你已经更新jQuery的版本和jQuery的新版本有不同的新的更新,他们也已删除了部分功能就像.live与更换。对它

通过它...

http://jquery.com/upgrade-guide/1.9/#live-removed



Answer 4:

我最近碰到这一点。 我升级从MVC 2至5 MVC看来参数名称由“最小”和“最大”到“最小”和“最大”改变

如果要解决这个问题,而无需通过升级JavaScript文件的麻烦去,搜索在您的这两条线中,并用更好的线替换它们

rule.ValidationParameters['minimum']

用。。。来代替

typeof(rule.ValidationParameters['minimum'])!='undefined'?rule.ValidationParameters['minimum']:rule.ValidationParameters['min']

rule.ValidationParameters['maximum'];

typeof(rule.ValidationParameters['maximum'])!='undefined'?rule.ValidationParameters['maximum']:rule.ValidationParameters['max']

或可替换地,代替使用此代码“RangeValidator控件”功能

Sys.Mvc.RangeValidator.create=function(rule){var $0=typeof(rule.ValidationParameters['minimum'])!='undefined'?rule.ValidationParameters['minimum']:rule.ValidationParameters['min'];var $1=typeof(rule.ValidationParameters['maximum'])!='undefined'?rule.ValidationParameters['maximum']:rule.ValidationParameters['max'];return Function.createDelegate(new Sys.Mvc.RangeValidator($0,$1),new Sys.Mvc.RangeValidator($0,$1).validate);}


文章来源: client-side validation trips on DataAnnotation Range attribute