即。我在页面上有一个电子邮件字段。我想在客户端上验证它(因此,无法发布无效值)和服务器端(如果禁用客户端验证)。有3个属性,与电子邮件相关联:
[DataType(DataType.EmailAddress)]
[EmailAddress]
[RegularExpression(@"...")]
我们应该为此目的使用哪个?
我知道,DataTypeAttribute
继承自ValidationAttribute
,但IsValid
方法被覆盖并始终返回true:
https://referencesource.microsoft.com/#System.ComponentModel.DataAnnotations/DataAnnotations/DataTypeAttribute.cs,c3a0957894bdc158
但EmailAddressAttribute
继承自DataTypeAttribute
并且已覆盖IsValid
,但逻辑依赖于Regex。
因此,无论如何,我们必须使用[EmailAddress]
而不[DataType(DataType.EmailAddress)]
因为[EmailAddress]
扩展[DataType(DataType.EmailAddress)]
。
让我们一起使用[EmailAddress]
或[RegularExpression(@"...")]
。在我看来,我们必须使用[EmailAddress]
,因为它有"好处"来自DataTypeAttribute
。因此,正确的方法是仅使用[EmailAddress]
。我是对的吗?