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

4
在注册表单中,我使用EmailAddress属性来验证用户的电子邮件地址。
public class RegisterViewModel
{
    [Required(ErrorMessage = "Pole wymagane")]
    [Display(Name = "Email")]
    [DataType(DataType.EmailAddress)]
    [EmailAddress]
    public string Email { get; set; }
}

如果验证失败,有没有机会显示电子邮件地址有什么问题?例如,“糟糕,我看到您的电子邮件地址包含空格”。


[EmailAddress]是一个正则表达式验证属性,它要么通过,要么失败。如果您想测试特定的失败情况,您需要编写自己的验证属性。 - user3559349
你在HTML中添加了ValidationFor标签吗? - Nedim Hozić
你得为此编写自定义验证属性... - Developer
你不能使用 EmailAddressAttribute 来创建继承自它的自定义验证类,但是你可以在为电子邮件地址字段创建特定的验证规则时从 ValidationAttribute 继承,而不是使用默认的规则。 - Tetsuya Yamamoto
我原本以为我必须编写自定义验证,谢谢! - mateusz-dot
2个回答

4

你需要为此添加另一个验证。例如使用[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; }
}

3

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

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

注意:我刚刚在现有的.NET正则表达式匹配电子邮件的模式周围添加了空格:

"^\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;
        }
    }
}

请注意,我已修改了getter并返回_email.Trim(),这可以确保我们在使用电子邮件值之前始终摆脱额外的空格。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接