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

时间:2011-03-02 21:34:56

标签: c# .net asp.net-mvc-3

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

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

1 个答案:

答案 0 :(得分: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,因此客户端验证也可以正常工作。

当然,如果此示例中使用的正则表达式不适合您,请不要犹豫,改进它。