我在我的 View 模型中的属性上定义了 [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 位数字)。具体来说,如果你去这里:
您会看到正则表达式几乎允许任何数字。如果您想要美国特定电话验证,那么您可能应该只使用正则表达式属性,或基于此开发您自己的 USPhoneAttribute。
关于c# - 为什么电话数据注释不起作用,即使在需要时也是如此?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22774197/