2014-05-15 145 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代碼替換它的組件。