繁体   English   中英

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

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

这是怎么回事?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM