Asp.net mvc 4 DataAnnotation范围属性上的客户端验证行程

Asp.net mvc 4 DataAnnotation范围属性上的客户端验证行程,asp.net-mvc-4,jquery-validate,data-annotations,unobtrusive-validation,Asp.net Mvc 4,Jquery Validate,Data Annotations,Unobtrusive Validation,我的模型类中有以下代码: [Range(1, 100)] public decimal Price { get; set; } 在最近将jquery.validate升级到1.11.0之后(我假设),即使输入了有效值,我也会收到一个错误。如果我在web.config中关闭客户机验证-工作正常。所有其他属性(StringLength,必选)都可以正常工作。生成的HTML如下(为清晰起见添加了换行符): 我很确定它以前是有效的。。。除了jquery.validate中的bug之

我的模型类中有以下代码:

    [Range(1, 100)]
    public decimal Price { get; set; }
在最近将jquery.validate升级到1.11.0之后(我假设),即使输入了有效值,我也会收到一个错误。如果我在web.config中关闭客户机验证-工作正常。所有其他属性(StringLength,必选)都可以正常工作。生成的HTML如下(为清晰起见添加了换行符):



我很确定它以前是有效的。。。除了jquery.validate中的bug之外,我想不出任何东西。

之所以会发生这种情况,是因为您已经更新了jquery版本,而新版本的jquery有不同的新更新,并且它们还删除了一些函数,如.live,并将其替换为.on

经历它


Microsoft发布了对Microsoft.jQuery.Unobtrusive.Ajax和Microsoft.jQuery.Unobtrusive.Validation的更新(从版本“2.0.20710.0”到“2.0.30116.0”)这解决了实时和验证问题我们在jQuery.validate 1.11.0和Microsoft.jQuery.Unobtrusive.validation 2.0.30116.0中遇到了相同的问题。在验证库更新的某个地方,数字验证程序坏了

GitHub问题跟踪器上存在与此问题相关的未决问题:

该期引述:


返回这个。可选的(元素)| |(值>=param[0]&&value=Number(param[0])&&Number(值)我最近遇到了这个。我从MVC 2升级到MVC 5。参数名似乎从“最小值”和“最大值”更改为“最小值”和“最大值”

如果您想在不升级JavaScript文件的情况下解决问题,请在解决方案中搜索这两行代码,并用更好的代码替换它们

rule.ValidationParameters['minimum']
取代

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

或者,用此代码替换“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);}

您使用的是哪个jquery版本?问题是关于jquery not validate check的,看起来这是一个不同的问题;与jquery本身无关。介于jquery validate和Untrusive Validation之间非常感谢!是的,我还弹出了一个关于的弹出窗口。在我将jquery升级到1.9.1之后,live不再受支持。一旦我添加了jquery.migrate弹出窗口消失。但是验证错误仍然存在!它可能有相同的根本原因;但添加“迁移”没有帮助;我在列表中没有找到任何内容-看起来像是来自Microsoft的实际适配器有问题。必须调整适配器以解析一个数字(在代码中查找adapters.addMinMax)+1此解决方案工作得很好。没有它,截至2013年4月10日,即使使用最新的jQuery文件,我仍然会遇到问题。上面链接中的GitHub问题跟踪程序报告了jQuery Validation V1.11.1(2013年3月25日发布)中修复的问题。它现在适用于我。(我有Microsoft.jQuery.Unobtrusive.Validation 2.0.30506.0)我仍然有
2.0.30116.0
的问题。我更新了所有内容。@Rowan,您可能想开始一个新的线程并提供更多详细信息……我很乐意提供帮助;但是我在2.0.30116上不再有问题了-因此很难进一步排除故障!看起来您非常讨厌升级标准软件包的麻烦。Most开发人员更不愿意对标准包进行更改,而且无论如何,2年前从MVC升级而来!
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']
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);}