为什么即使需要,电话数据注释也无法正常工作?

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]。例如,如果我输入文本123ModelState.IsValid则is仍然true是因为该属性未验证输入。更糟的是,客户端没有像电子邮件地址那样发生任何事情。如果我输入了无效的电子邮件地址,则实际上可以得到JavaScript验证-如预期的那样。

这是怎么回事?

我正在使用Mvc 5.1.0.0,所以我已经更新到最新版本,以确保它不是特定于版本的。

Eri*_*sch 5

实际上,它可以验证。问题是,123是一个有效的电话号码,在某处...如果尝试输入字母,您会发现验证失败。但是,如果您输入(123)234-2342,它将成功...

这是因为它必须适用于全世界的电话号码。它甚至必须用于内部扩展(可以很容易地长2、3、4或5位数字)。具体来说,如果您去这里:

http://referencesource.microsoft.com/#System.ComponentModel.DataAnnotations/DataAnnotations/PhoneAttribute.cs

您会看到正则表达式几乎允许任何数字。如果要验证“美国专用电话”,则应该只使用regex属性,或基于此属性开发自己的USPhoneAttribute。