使用不引人注目的javascript/MVC3和DataAnnotations验证电子邮件地址

本文关键字:MVC3 DataAnnotations 验证 电子邮件地址 javascript 引人注目 | 更新日期: 2023-09-27 17:58:01

jQuery Validation使验证电子邮件地址变得简单:
$("someForm").validate({
    rules: {
        SomeField: {
            required: true,
            email: true,
            remote: {
                type: "POST",
                url: "CheckEmail"
            }
        }
    }
});

这使得SomeField是必需的,必须格式化为电子邮件地址,并且还执行对CheckEmail操作的远程调用(检查是否重复(。

我喜欢把事情做得尽可能简单,这样我就可以用数据注释做很多相同的事情:

public class RegisterModel {
    [Required]
    [Remote("CheckEmail", "Home", HttpMethod="POST")]
    public string SomeField { get; set; }
}

ASP.net MVC 3/Data Annotations是否有一种内置/简单的验证方法来确保电子邮件地址的格式正确?

如果可能的话,我希望它能生成不引人注目的javascript。

使用不引人注目的javascript/MVC3和DataAnnotations验证电子邮件地址

我认为这是您要查找的代码(这与ScottGu的示例类似,但也在默认错误消息中显示DisplayName,而不是属性名称(:

public class EmailAttribute : RegularExpressionAttribute
{
    private const string defaultErrorMessage = "'{0}' must be a valid email address";
    public EmailAttribute() : 
        base("^[a-z0-9_''+-]+(''.[a-z0-9_''+-]+)*@[a-z0-9]+(''.[a-z0-9]+)*''.([a-z]{2,4})$")
    { }
    public override string FormatErrorMessage(string name)
    {
        return string.Format(defaultErrorMessage, name);
    }
    protected override ValidationResult IsValid(object value,
                                            ValidationContext validationContext)
    {
        if (value != null)
        {
            if (!base.IsValid(value))
            {
                return new ValidationResult(
                    FormatErrorMessage(validationContext.DisplayName));
            }
        }
        return ValidationResult.Success;
    }
}

那么你的模型属性会是这样的:

    [DisplayName("My Email Address")]
    [Email]
    public string EmailAddress { get; set; }

ASP.net MVC 3/数据注释有一种内置/简单的验证方法以确保电子邮件地址在正确的格式?

不是内置的,但您可以使用[RegularExpression]。Scott Gu在一篇博客文章中举例说明了这种正则表达式。他编写了一个从RegularExpressionAttribute派生的自定义EmailAttribute,以避免重复逻辑。

数据注释扩展库具有允许验证电子邮件地址的[Email]属性。

还有一篇博客文章概述了如何使用图书馆。

EmailAddress属性已经内置到框架中,不需要数据注释扩展或其他逻辑:使用DataAnnotations和DataType 进行电子邮件模型验证