无法验证客户端的电子邮件

问题描述:

我正在使用下面的类和默认的脚手架视图,但我无法验证客户端的电子邮件。我也尝试了另一个电子邮件的正则表达式,但是这也不起作用。我在这里错过了什么?无法验证客户端的电子邮件

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}$") 
    { 
    } 
} 
+0

该正则表达式拒绝许多有效的电子邮件地址。 – CodesInChaos 2011-03-02 21:41:05

您可能会感兴趣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,所以客户端验证也会起作用。

当然,如果在这个例子中使用的正则表达式不适合你,毫不犹豫地改进它。

+0

该正则表达式拒绝许多有效的电子邮件地址。 – CodesInChaos 2011-03-02 21:43:21

+0

@CodeInChaos,是的,当然,这个正则表达式可以改进。 – 2011-03-02 21:44:49

+0

@codeInChaos,将不胜感激知道正确的正则表达式。 – Freshblood 2011-03-02 21:49:43