Проверка модели электронной почты с помощью DataAnnotations и DataType

У меня есть следующая модель:

public class FormularModel
{
    [Required]
    public string Position { get; set; }
    [Required]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }
    [Required]
    public string Webcode { get; set; }
}

Требуемая проверка достоверна. Но когда я пытаюсь использовать DataType, он не реагирует.

Вот мой код бритвы для элемента управления электронной почты:

   @Html.TextBoxFor
          (model => model.Email, 
           new { @style = "width: 175px;", @class = "txtField" }
          ) * 

Итак, кто-нибудь знает ответ?

ТИА

Ответ 1

Атрибут

DataType используется для форматирования, а не для проверки.

Я предлагаю вам использовать ASP.NET MVC 3 Futures для проверки подлинности электронной почты.

Пример кода:

[Required]
[DataType(DataType.EmailAddress)]
[EmailAddress]
public string Email { get; set; }

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

Ответ 3

Я посмотрел исходный код (обратный, спроектированный рефлектором), а варианты DataType на самом деле даже не реализованы! (Это было для DateType.Date)

Так что это не сработает.

Я лично использовал бы RegexValidation для электронной почты.


Для ясности здесь приведена реализация IsValid в классе DataTypeAttribute:

public override bool IsValid(object value)
{
    return true;
}

Ответ 4

Я думаю, вам нужно добавить в html-код один компонент Html.ValidationMessageFor. Этот компонент показывает проверку.

Код может быть (с использованием бритвы):

@Html.TextBoxFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)

попробуйте.