Проверка адреса электронной почты с ненавязчивыми javascript/MVC3 и DataAnnotations

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

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

Ответ 1

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

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

Ответ 2

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

Ответ 3

В библиотеке Data Annotation Extensions есть атрибут [Email], который позволяет проверять адрес электронной почты.

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