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

问题描述 投票:0回答:2

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

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

如果验证失败,是否有机会显示电子邮件地址的问题?例如“哎呀,我发现您的电子邮件地址包含空格”

asp.net-mvc data-annotations
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; }
}

2
投票

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

// 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 => _email;

        set
        {
            _email = string.IsNullOrEmpty(value) ? string.Empty : value.Trim();
        }
    }
}

请注意,我已经修改了设置器

trim
value
。这确保我们在使用电子邮件值之前始终消除多余的空格。

© www.soinside.com 2019 - 2024. All rights reserved.