0

我有一個MVCV5項目的數據註釋,它在大多數情況下都能正確驗證。但是,如果用戶只輸入空格(例如4個空格),驗證不會在客戶端捕獲它(儘管驗證會在發佈時捕獲它)。有沒有辦法讓這些在客戶端正確驗證?當輸入是所有字符串時,MVC DataAnnotation MaxLength失敗

[StringLength(3, ErrorMessage = "Must be under 3 characters")] 
[RegularExpression(@"^[0-9]{0,3}$", ErrorMessage = "Area code should be 3 digits only")] 
public string AreaCode { get; set; } 

我使用下列庫:

jQuery.Validation: version 1.13.1 
Microsoft.jQuery.Unobtrusive.Validation: version 3.2.3 
+1

就jQuery Validate插件而言,只包含四個空格的字段仍然被視爲空。但是,在驗證'minlength'時,只有在非空字符的情況下才會計算前導空格。沒有其他技巧或解決方法。如果您認爲這是一個錯誤,或者它的工作方式不同,那麼您必須在他的GitHub頁面上聯繫開發人員。 http://jsfiddle.net/Lst6puxc/ – Sparky

+0

斯帕基,我認爲你是對的。 jquery.validate.js文件有兩個地方:「this.optional(element)」,但應該查找「(this.optional(element)== true)」。我把它放在兩個地方,然後驗證工作。當字段只有空格時,「this.optional(element)」調用返回「依賴不匹配」。 – GnomeCubed

+0

看起來他們修復了這個問題。 https://github.com/jzaefferer/jquery-validation/issues/1498 – GnomeCubed

回答

0

我建議使用採用IValidateObject型號級別的驗證,然後使用IsNullOrWhiteSpace屬性來驗證空字符串/空/空格。

public class Model : IValidatableObject 
{ 
    public string FirstName { get; set; } 
} 

public IEnumerable<ValidationResult>Validate(ValidationContext validationContext) 
{ 
    if (String.IsNullOrWhiteSpace(FirstName)) 
    { 
     yield return new ValidationResult("First Name Required", new string[] { "FirstName" }); 
    } 
} 
0

好吧,如果你限制輸入3個字符,快捷方式是要明確它與maxlength

<input type='text' maxlength="3"... 

至於空間(只),JQuery驗證要抓與required。 Hth

+0

是的,它的屬性data-val-length-max =「3」就可以了,但似乎還沒有抓住空格。因爲它是一個可選字段,所以我沒有放入必填項。 – GnomeCubed

+1

@GnomeCubed不是'data'屬性,[標準HTML輸入字段'maxlength'屬性](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input)。如果它不是「必需的」,那麼它可以有空格,你必須爲它創建一個自定義的jquery驗證規則。 – EdSF

+0

我一直希望使用我的項目中的內置註釋來做到這一點,所以我不必手動編輯一堆html屬性。 – GnomeCubed

0

我能夠通過查看「可選」功能很簡單地解決這個問題。

可選功能(根據此博客文章): http://lagod.id.au/blog/?p=514&cpage=1#comment-213145不告訴你該字段是否可選。它只是告訴你,該字段是否爲空。

可選功能回報:

!$.validator.methods.required.call(this, val, element) && "dependency-mismatch"; 

所以我看着所需的方法,發現它修剪檢查其長度之前的字段值。

這是一個簡單的修復,因此,而不是返回:

$.trim(value).length > 0; 

我有它設置返回:

value.length > 0; 

,導致它驗證領域,即使你只輸入一個空格。所以現在我的郵政編碼驗證,如果你輸入一個空格,因爲它應該只允許數字。

相關問題