MVC不引人注目的验证错误地触发

时间:2014-05-15 19:35:42

标签: jquery asp.net-mvc unobtrusive-validation

我们将数据注释与我们的某个应用程序的jQuery.validate.unobtrusive插件结合使用,并且遇到了一个独特的,现在似乎是一个bug。

查看模型属性

[Required(ErrorMessage = "You must specifiy a point value for the contest entry")]
[Min(5, ErrorMessage = "The point value must be at least 5 points for this contest")]
[DisplayName("Points required for entry:")]
public int RequiredPoints { get; set; }

查看

<li class="reqpoints">@Html.LabelFor(x => x.RequiredPoints) @Html.TextBoxFor(x => x.RequiredPoints)</li>

结果HTML

<li class="reqpoints">

    <label for="RequiredPoints"></label>
    <input id="RequiredPoints" class="input-validation-error" type="text" value="10" name="RequiredPoints" data-val-required="You must specifiy a point value for the contest entry" data-val-range-min="5" data-val-range="The point value must be at least 5 points for this contest" data-val-number="The field Points required for entry: must be a number." data-val="true"></input>

</li>

如果输入到文本框中的数字是5-9或者第一个数字是5或更大,则此方法很有效。从10到49,100-499,1000-4999等的任何数字都会被拒绝,并且错误消息必须至少为5个点,几乎就像截断最后一个数字一样。这不会发送到服务器并返回,它是jQuery验证部分即将启动。有没有人看到使用Min()这样的单个整数值的问题?

我应该注意,我们在其他地方使用这个,其中最小值为100且没有任何问题(我知道)任何大于100的数字被拒绝。

相关版本:

  • jQuery - 1.8.4
  • jQuery.Validation - 1.12.0
  • jQuery.validation.unobtrusive - 3.1.2

更新

如果我将Min属性更改为至少10,那么一切都按预期工作。此外,如果我使用Range(5,99999)数据属性,那么所有值似乎也按预期工作。似乎jQuery 1.8.4和最新版本的验证插件的组合可能存在单位数最小验证的问题。

1 个答案:

答案 0 :(得分:0)

这是我们几年来一直支持的项目,我不得不刷新项目的一些知识。

Min()属性实际上是DataAnnotationExtensions包的一部分,它使用jQuery验证框架添加了一些额外的数据注释和插件。将此软件包与jQuery验证框架一起安装(全部都是最新的)我可以在一个全新的全新项目中复制这个问题。

我会将此问题报告给软件包作者,但是如果其他人使用此软件包遇到此问题,请将此问题留在此处。解决方法是使用Range()数据注释。

<强>更新

Issue reported here - 但是,这个项目似乎没有在一段时间内正式更新。我可以研究一下我们如何使用这个项目并用官方.NET位替换它的组件。