ASP.NET MVC 5:EmailAddress属性自定义错误消息

时间:2017-01-27 09:09:12

标签: asp.net-mvc data-annotations

在注册表单中,我使用EmailAddress属性来验证用户电子邮件。

public class RegisterViewModel
{
    [Required(ErrorMessage = "Pole wymagane")]
    [Display(Name = "Email")]
    [DataType(DataType.EmailAddress)]
    [EmailAddress]
    public string Email { get; set; }
}

如果验证失败,是否有机会显示电子邮件地址有什么问题?例如'oops,我看到你的电子邮件地址包含空格'

2 个答案:

答案 0 :(得分:1)

您必须为此添加另一个验证。使用[RegularExpression]

的示例
public class RegisterViewModel
{
    [Required(ErrorMessage = "Pole wymagane")]
    [RegularExpression(@"^\S*$", ErrorMessage = "Email Address cannot have white spaces")]
    [Display(Name = "Email")]
    [DataType(DataType.EmailAddress)]
    [EmailAddress]
    public string Email { get; set; }
}

答案 1 :(得分:0)

您可以为电子邮件定义自己的正则表达式:

// built-in [EmailAddress] does not allow white spaces around email
public const string EmailValidationRegEx = @"^\s*\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*$"; 

注意:我刚刚在现有.NET regex pattern for email match周围添加了空格: "^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"

现在您可以使用此新的正则表达式模式代替[EmailAddress]属性:

public class RegisterViewModel
{
    private string _email;

    [Required(ErrorMessage = "Pole wymagane")]
    [Display(Name = "Email")]
    [DataType(DataType.EmailAddress)]
    [RegularExpressionWithOptions(EmailValidationRegEx, ErrorMessage = "Invalid email")]
    public string Email 
    { 
        get
        {
            if (!string.IsNullOrEmpty(_email))
            {
                return _email.Trim(); 
            }

            return string.Empty;
        }

        set
        {
            _email = value;
        }
    }
}

请注意,我已经修改了吸气剂并返回_email.Trim(),这可以确保在使用电子邮件值之前,我们总是摆脱多余的空格。