Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 当输入为所有字符串时,MVC DataAnnotation MaxLength失败_Jquery_Asp.net Mvc_Jquery Validate_Unobtrusive Validation - Fatal编程技术网

Jquery 当输入为所有字符串时,MVC DataAnnotation MaxLength失败

Jquery 当输入为所有字符串时,MVC DataAnnotation MaxLength失败,jquery,asp.net-mvc,jquery-validate,unobtrusive-validation,Jquery,Asp.net Mvc,Jquery Validate,Unobtrusive Validation,我有一个MVCV5项目的数据注释,它在大多数情况下都能正确验证。但是,如果用户只输入空格(例如4个空格),则验证不会在客户端捕获它(尽管验证会在发布时捕获它)。有没有一种方法可以让这些在客户端正确验证 [StringLength(3,ErrorMessage=“必须少于3个字符”)] [RegularExpression(@“^[0-9]{0,3}$”,ErrorMessage=“区号应仅为3位”)] 公共字符串区域代码{get;set;} 我正在使用以下库: jQuery.Validatio

我有一个MVCV5项目的数据注释,它在大多数情况下都能正确验证。但是,如果用户只输入空格(例如4个空格),则验证不会在客户端捕获它(尽管验证会在发布时捕获它)。有没有一种方法可以让这些在客户端正确验证

[StringLength(3,ErrorMessage=“必须少于3个字符”)]
[RegularExpression(@“^[0-9]{0,3}$”,ErrorMessage=“区号应仅为3位”)]
公共字符串区域代码{get;set;}
我正在使用以下库:

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

我建议使用IValidateObject进行模型级验证,然后使用IsNullOrWhiteSpace属性验证空字符串/null/空格

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" }); 
   } 
}
公共类模型:IValidatableObject
{ 
公共字符串名{get;set;}
} 
公共IEnumerableValidate(ValidationContext ValidationContext)
{ 
if(String.IsNullOrWhiteSpace(FirstName))
{ 
返回新的ValidationResult(“需要名字”,新字符串[]{“名字”});
} 
}

如果您将输入限制为3个字符,那么快速的方法是使用
maxlength
明确说明:

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

通过查看“可选”函数,我可以很简单地解决这个问题

可选功能(根据本博客文章): 不会告诉您该字段是否为可选字段。它只是告诉您字段是否为空

可选函数返回:

!$.validator.methods.required.call( this, val, element ) && "dependency-mismatch";
因此,我查看了所需的方法,并注意到它在检查字段长度之前正在修剪字段值

这是一个简单的修复程序,因此不返回:

$.trim( value ).length > 0;
我让它设置为返回:

value.length > 0;

即使只输入一个空格,也会使其验证字段。因此,如果您在zipcode中输入一个空格,我的zipcode就会进行验证,因为它应该只允许数字。

就jQuery验证插件而言,仅包含四个空格的字段仍然被视为空字段。但是,在验证
minlength
时,仅当存在非空字符时,才会计算前导空格。没有其他技巧或解决方法。如果您认为这是一个bug或者它应该以不同的方式工作,那么您必须在GitHub页面上与开发人员联系。斯帕基,我想你是对的。jquery.validate.js文件查找几个位置:“this.optional(element)”但可能应该查找“(this.optional(element)==true)”。我把它放在两个地方,然后验证成功了。当字段只有空格时,“this.optional(element)”调用返回“dependency mismatch”。看起来他们解决了这个问题。是的,它上面有属性data val length max=“3”,但似乎仍然没有捕捉到空格。我没有输入required,因为它是可选字段。@GnomeCubed不是
数据
属性。如果它不是“必需的”,那么它可以有空格,您必须为它创建一个自定义jquery验证规则。我希望使用项目中的内置注释来实现这一点,这样我就不必手动编辑一堆html属性。