Skip to main content
 首页 » 编程设计

c#之无法在客户端验证电子邮件

2024年02月23日28jackei

我正在使用下面的类和默认的脚手架 View ,但我无法在客户端验证电子邮件。我还尝试了另一个电子邮件正则表达式,但也没有用。我在这里缺少什么?

public class Person 
{ 
    [Email(ErrorMessage="...........")] 
    public string Name { get; set; } 
} 
public class EmailAttribute : RegularExpressionAttribute 
{ 
    public EmailAttribute() 
        : base(@"^[A-Za-z0-9._%+-]+@[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客户端验证也将起作用。

当然,如果本示例中使用的正则表达式不适合您,请毫不犹豫地对其进行改进。