Jquery 当输入为所有字符串时,MVC DataAnnotation MaxLength失败
我有一个MVCV5项目的数据注释,它在大多数情况下都能正确验证。但是,如果用户只输入空格(例如4个空格),则验证不会在客户端捕获它(尽管验证会在发布时捕获它)。有没有一种方法可以让这些在客户端正确验证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
[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属性。