Проверка адреса электронной почты с помощью ненавязчивого javascript / MVC3 и DataAnnotations - PullRequest
11 голосов
/ 27 мая 2011

Проверка jQuery упрощает проверку адреса электронной почты:

$("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, если это возможно.

Ответы [ 4 ]

11 голосов
/ 27 мая 2011

Я думаю, что это код, который вы ищете (это похоже на пример 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; }
9 голосов
/ 27 мая 2011

Библиотека расширений аннотаций имеет атрибут [Email], который позволяет проверять адрес электронной почты.

Существует также сообщение в блоге , в котором рассказывается, как использовать библиотеку.

9 голосов
/ 27 мая 2011

Поддерживает ли ASP.net MVC 3 / аннотации данных иметь встроенный / простой способ проверки чтобы убедиться, что адрес электронной почты находится в правильный формат?

Не встроенный, но вы можете использовать [RegularExpression]. Скотт Гу проиллюстрировал пример такого регулярного выражения в блоге . Он написал обычай EmailAttribute, происходящий от RegularExpressionAttribute, чтобы избежать повторения логики.

0 голосов
/ 24 мая 2017

Атрибут EmailAddress уже встроен в каркас, нет необходимости в расширениях аннотаций данных или другой логике: Проверка модели электронной почты с использованием DataAnnotations и DataType

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...