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
Вы предложили бы мне это?
Ответы
Ответ 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]
), форма будет отправлена с пустым адрес электронной почты.