Проверка адреса электронной почты с использованием атрибутов типа данных ASP.NET MVC

У меня есть некоторые проблемы с проверкой электронной почты.

В моей модели:

[Required(ErrorMessage = "Field can't be empty")]
[DataType(DataType.EmailAddress, ErrorMessage = "E-mail is not valid")]
public string ReceiverMail { get; set; }

На мой взгляд:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@Html.TextBoxFor(m => m.ReceiverMail, new { @placeholder="E-mail"}) <br />
@Html.ValidationMessageFor(m => m.ReceiverMail)

Теперь это правильно показывает мне, что поле не может быть пустым, когда вы покидаете поле пустым. Но когда вы заполняете недействительный адрес электронной почты, например: "fwenrjfw", тогда форма не говорит "E-mail недействителен".

Как я могу получить форму для подтверждения ввода в качестве адреса электронной почты? Мне нужна помощь.

Ответ 1

Если вы используете .NET Framework 4.5, решение должно использовать EmailAddressAttribute, который находится внутри System.ComponentModel.DataAnnotations.

Ваш код должен выглядеть примерно так:

[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }

Ответ 2

Попробуйте Html.EditorFor вспомогательный метод вместо Html.TextBoxFor.

Ответ 3

Вам нужно использовать атрибут RegularExpression, что-то вроде этого:

[RegularExpression("^[a-zA-Z0-9_\\.-][email protected]([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$", ErrorMessage = "E-mail is not valid")]

И не удалять [Обязательный], потому что [RegularExpression] не влияет на пустые поля.

Ответ 4

если вы еще не используете .net 4.5:

/// <summary>
/// TODO: AFTER WE UPGRADE TO .NET 4.5 THIS WILL NO LONGER BE NECESSARY.
/// </summary>
public class EmailAnnotation : RegularExpressionAttribute
{
    static EmailAnnotation()
    {
        DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAnnotation), typeof(RegularExpressionAttributeAdapter));
    }

    /// <summary>
    /// from: http://stackoverflow.com/a/6893571/984463
    /// </summary>
    public EmailAnnotation()
        : base(@"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*"
            + "@"
            + @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$") { }

    public override string FormatErrorMessage(string name)
    {
        return "E-mail is not valid";
    }
}

Затем вы можете сделать это:

    public class ContactEmailAddressDto
    {
        public int ContactId { get; set; }
        [Required]
        [Display(Name = "New Email Address")]
        [EmailAnnotation] //**<----- Nifty.**
        public string EmailAddressToAdd { get; set; }
    }

Ответ 5

Я использую MVC 3. Пример свойства адреса электронной почты в одном из моих классов:

[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[Email(ErrorMessage = "The email address is not valid")]
public string Email { get; set; }

Удалите Required, если вход не является обязательным. Нет необходимости в регулярных выражениях, хотя у меня есть один, который охватывает все параметры в адресе электронной почты до уровня RFC 2822 (он очень длинный).

Ответ 6

[Required(ErrorMessage = "Please enter Social Email id")]
    [DataType(DataType.EmailAddress)]
    [EmailAddress]
    public string Email { get; set; }

Ответ 7

Скрипты обычно загружаются в конце html-страницы, и MVC рекомендует использовать пакеты, просто говоря. Поэтому лучше всего, чтобы ваши файлы jquery.validate были изменены каким-либо образом или не обновлены до последней версии, так как они проверяют входящие сообщения электронной почты.

Таким образом, вы можете либо обновить/обновить свой пакет nuget, либо написать свою собственную функцию.

Вот пример, который вы бы добавили в дополнительный файл после jquery.validate.unobtrusive:

$.validator.addMethod(
    "email",
    function (value, element) {
        return this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_'{|}~-][email protected][a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );
    },
    "This e-mail is not valid"
);

Это просто копирование и вставка текущего jquery.validate, но таким образом вы можете установить свое собственное сообщение об ошибке/добавить дополнительные методы в поля, которые вы можете проверить в ближайшем будущем.

Ответ 8

Использовал приведенный выше код в проекте MVC5, и он прекрасно работает с ошибкой проверки. Просто попробуйте этот код

   [Required]
   [Display(Name = "Email")]
   [EmailAddress]

   [RegularExpression(@"^([A-Za-z0-9][^'!&\\#*$%^?<>()+=:;'~\[\]{}|/,₹€@ ][a-zA-z0- 
    9-._][^!&\\#*$%^?<>()+=:;'~\[\]{}|/,₹€@ ]*\@[a-zA-Z0-9][^!&@\\#*$%^?<> 
        ()+=':;~'.\[\]{}|/,₹€ ]*\.[a-zA-Z]{2,6})$", ErrorMessage = "Please enter a 
   valid Email")]


   public string ReceiverMail { get; set; }