Подтвердить что ты не робот

Mvc [DataType (DataType.EmailAddress) без проверки

Я использую этот код в поле электронной почты:

    [Required]
    [DataType(DataType.EmailAddress)]
    [Display(Name = "Email address")]
    public string Email { get; set; }

[DataType(DataType.EmailAddress)] не работает (проверка не происходит на сервере не на стороне клиента).

Я не уверен, должен ли я реализовать собственный пользовательский атрибут, или я могу использовать один из них с MVC 3.

Не могли бы вы предложить мне решение для создания настраиваемого атрибута в случае необходимости.

Я читаю также о некоторых дополнительных расширениях, например http://nuget.org/packages/DataAnnotationsExtensions.MVC3

Вы предложили бы мне это?

4b9b3361

Ответ 1

На данный момент я решил свою проблему с помощью DataAnnotationsExtensions

это просто работает, вы добавляете их библиотеку с NuGet

using DataAnnotationsExtensions;


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

Ответ 2

Вы можете использовать обычную библиотеку DataAnnotations, просто используя [EmailAddress]

using System.ComponentModel.DataAnnotations;
    [Required]
    [EmailAddress]
    public String Email { get; set; }

Также для справки, здесь версия регулярного выражения этой проверки:

    [RegularExpression(@"^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-‌​]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$", ErrorMessage = "Email is not valid")]
    public String Email {get; set;}

Удачи!

Ответ 3

Похоже, что все ответы сосредоточены на модели данных, в то время как на эту проблему может влиять сам вид.

Ниже в MVC.NET 4.5 работает нормально:

Модель данных:

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

Вид бритвы:

@Html.LabelFor(model => model.Email)
@Html.EditorFor(model => model.Email)

Примечание. не нужно добавлять атрибут [EmailAddress]. Если вы используете [DataType (DataType.EmailAddress)] вместе с @Html.EditorFor() в своем представлении, вы должны быть в порядке.

Как указано в rich.okelly, в конце вы хотите, чтобы ваш вход отображался как <input type="email" />.

Ответ 4

Может быть, это будет полезно для кого-то. Следующие работы для меня

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

Но не работает после

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

Я использую MVC 5 и .NET 4.5

Ответ 5

Как Феликс упомянул, проблема находится на уровне View, вам нужно использовать EditorFor() в View вместо TextBoxFor(), EditorFor() отобразит:

<input type="email" />

который вызовет проверку, а TextBoxFor() отобразит:

<input type="text" />

Итак, чтобы проверить введенный адрес электронной почты, вам нужно (в сочетании с EditorFor()) использовать только:

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

Таким образом, ваше введенное значение для электронной почты будет всегда проверено, но если вы не укажете значение для электронной почты, ничего не произойдет (если вы не указали атрибут [Required]), форма будет отправлена ​​с пустым адрес электронной почты.