【问题标题】:MVC Unobtrusive Validation Incorrectly FiringMVC 不显眼的验证错误触发
【发布时间】:2014-05-15 19:35:41
【问题描述】:

我们将数据注释与 jQuery.validate.unobtrusive 插件结合用于我们的一个应用程序,并在今天遇到了一个独特的,似乎是一个错误。

查看模型属性

[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 和最新版本的验证插件的组合可能存在一位数最小验证的问题。

【问题讨论】:

  • 最后你的意思是任何小于 100 的数字都被拒绝了吗? 不善于阅读抱歉
  • @AdmiralAdama - 不,这意味着它应该/预期的那样工作。如果用户输入 99,则拒绝。如果他们输入 101,它适用于另一个视图模型中的特定字段(与该视图模型无关)。在我遇到问题的情况下,它拒绝任何不以 5 或更大开头的东西。我提到最后一个例子只是为了表明它在我们应用程序的其他地方确实有效,只是不是这个实例?
  • 对不起,我看错了最后一个例子。你试过换号码吗?听起来 jquery 没有正确转换为整数。 Similar question
  • @AdmiralAdama - 没有汗水!虽然这个问题是关于 SO 的,但我将创建一个具有相同文件版本的新项目,看看我是否可以复制其他包是否导致问题。
  • 谢谢。这看起来很奇怪,但这可能是您的不显眼验证版本中的一个错误。

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


【解决方案1】:

这是一个我们已经支持了几年的项目,我不得不更新有关该项目的一些知识。

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

我会将这个问题报告给包作者,但会留在这里,以防其他使用这个包的人遇到这个问题。解决方法是使用Range() 数据注释。

更新

Issue reported here - 然而,这个项目似乎已经有一段时间没有正式更新了。我可能会检查我们如何使用这个项目并用官方 .NET 位替换它的组件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 2016-02-19
    • 2020-12-20
    相关资源
    最近更新 更多