2014-05-15 106 views
1

我们将数据注释与jQuery.validate.unobtrusive插件结合用于我们的一个应用程序,并在今天遇到了一个独特的错误。MVC不显眼验证错误触发

查看模型属性

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

+0

*最后你的意思是任何小于100的数字被拒绝?*不好意思阅读对不起 – TheNorthWes

+0

@AdmiralAdama - 不,意思是它应该/预计工作。如果用户输入99,则拒绝。如果他们输入101,那么对于另一个视图模型中的特定字段(与此无关),它可以正常工作。在我遇到问题的情况下,它会拒绝任何不以5或更大开头的内容。我提到了最后一个例子,只是为了说明它在我们的应用程序的其他地方有效,而不是这一个实例? – Tommy

+0

对不起,我误解了最后一个例子。 您是否尝试更改号码?听起来像jquery不正确地转换为整数。 [类似问题](http://stackoverflow.com/questions/15341564/jquery-validation-does-not-validate-numbers-properly) – TheNorthWes

回答

0

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

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

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

更新

Issue reported here - 然而,它并没有出现在这个项目已在一段时间内被正式更新。我可以研究我们如何使用这个项目,并用官方的.NET代码替换它的组件。