[英]Why doesn't the Phone data annotation work, even when required?
我在视图模型的一个属性上定义了[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; }
}
但是它无法像[Email]
注释那样验证格式; 即使[Required]
。 例如,如果我输入文本123
则ModelState.IsValid
仍然为true
因为该属性无法验证输入。 更糟的是,客户端没有像电子邮件地址那样发生任何事情。 如果我输入了无效的电子邮件地址,则实际上可以得到JavaScript验证-如预期的那样。
这是怎么回事?
我正在使用Mvc 5.1.0.0,所以我已经更新到最新版本,以确保它不是特定于版本的。
实际上,它可以验证。 问题是123是一个有效的电话号码,在某处...如果尝试输入字母,您会注意到验证失败。 但是,如果您输入(123)234-2342,它将成功...
这是因为它必须适用于全世界的电话号码。 它甚至必须用于内部扩展(可以很容易地长2、3、4或5位数字)。 具体来说,如果您去这里:
您会看到正则表达式几乎允许任何数字。 如果要验证“美国专用电话”,则应该只使用regex属性,或基于此属性开发自己的USPhoneAttribute。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.