Mik*_*oud 1 c# validation asp.net-mvc
我[Phone]
在视图模型的一个属性上定义了数据注释:
public class ContactModel : BaseModel
{
[Required(ErrorMessage = "Please enter your first and last name.")]
[MaxLength(256, ErrorMessage = "Your name is too long, the maximum is 256 character.")]
public string Name { get; set; }
[Required(ErrorMessage = "Please enter your email address.")]
[EmailAddress(ErrorMessage = "Please enter a valid email address.")]
[MaxLength(256, ErrorMessage = "Your email address is too long, the maximum is 256 character.")]
[Display(Name = "Email Address")]
public string Email { get; set; }
[Phone(ErrorMessage = "Please enter a valid phone number.")]
[Display(Name = "Phone Number")]
public string Phone { get; set; }
[Required(ErrorMessage = "Please enter your comments or request.")]
[Display(Name = "Comments or Request")]
public string Comments { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是它不能像[Email]
注解那样验证格式;甚至当[Required]
。例如,如果我输入文本123
,ModelState.IsValid
则is仍然true
是因为该属性未验证输入。更糟的是,客户端没有像电子邮件地址那样发生任何事情。如果我输入了无效的电子邮件地址,则实际上可以得到JavaScript验证-如预期的那样。
这是怎么回事?
我正在使用Mvc 5.1.0.0,所以我已经更新到最新版本,以确保它不是特定于版本的。
实际上,它可以验证。问题是,123是一个有效的电话号码,在某处...如果尝试输入字母,您会发现验证失败。但是,如果您输入(123)234-2342,它将成功...
这是因为它必须适用于全世界的电话号码。它甚至必须用于内部扩展(可以很容易地长2、3、4或5位数字)。具体来说,如果您去这里:
您会看到正则表达式几乎允许任何数字。如果要验证“美国专用电话”,则应该只使用regex属性,或基于此属性开发自己的USPhoneAttribute。