Проверка модели электронной почты с помощью DataAnnotations и DataType - PullRequest
51 голосов
/ 24 января 2012

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

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" }
          ) * 

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

ТИА

Ответы [ 4 ]

110 голосов
/ 24 января 2012
Атрибут

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.

8 голосов
/ 24 января 2012

Проект DataAnnotationsExtensions имеет атрибут Email , который вы можете использовать.

3 голосов
/ 24 января 2012

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

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

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


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

public override bool IsValid(object value)
{
    return true;
}
0 голосов
/ 06 августа 2013

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

Код может быть (с помощью бритвы):

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

попробуй.

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