无法验证客户端的电子邮件
我正在使用下面的类和默认的脚手架视图,但我无法验证客户端的电子邮件。我也尝试了另一个电子邮件的正则表达式,但是这也不起作用。我在这里错过了什么?无法验证客户端的电子邮件
public class Person
{
[Email(ErrorMessage="...........")]
public string Name { get; set; }
}
public class EmailAttribute : RegularExpressionAttribute
{
public EmailAttribute()
: base(@"^[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$")
{
}
}
您可能会感兴趣following blog post。抽出来:
public class EmailAttribute : RegularExpressionAttribute, IClientValidatable
{
public EmailAttribute()
: base(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
@"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
@".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$")
{
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var errorMessage = FormatErrorMessage(metadata.GetDisplayName());
yield return new EmailValidationRule(errorMessage);
}
}
public class EmailValidationRule : ModelClientValidationRule
{
public EmailValidationRule(string errorMessage)
{
ErrorMessage = errorMessage;
ValidationType = "email";
}
}
和使用:
public class Person
{
[Required(ErrorMessage = "{0} is required.")]
[Email(ErrorMessage = "{0} appears to be invalid.")]
public string Name { get; set; }
}
而这几乎是所有。因为这个自定义属性实现了IClientValidatable,所以客户端验证也会起作用。
当然,如果在这个例子中使用的正则表达式不适合你,毫不犹豫地改进它。
该正则表达式拒绝许多有效的电子邮件地址。 – CodesInChaos 2011-03-02 21:43:21
@CodeInChaos,是的,当然,这个正则表达式可以改进。 – 2011-03-02 21:44:49
@codeInChaos,将不胜感激知道正确的正则表达式。 – Freshblood 2011-03-02 21:49:43
该正则表达式拒绝许多有效的电子邮件地址。 – CodesInChaos 2011-03-02 21:41:05