Аннотации по электронной почте/телефону ASP.Net MVC3 Аннотации не работают
У меня есть следующие свойства в моей модели
[Required]
[DataType(DataType.PhoneNumber, ErrorMessage = "Invalid Phone Number")]
public string PhoneNumber
{
get;
set;
}
[Required]
[DataType(DataType.EmailAddress, ErrorMessage = "Invalid Email Address")]
public string EmailAddress
{
get;
set;
}
Соответствующий вид
<td>
Email
</td>
<td>
@Html.EditorFor(model => model.EmailAddress)
@Html.ValidationMessageFor(model => model.EmailAddress, "*")
</td>
</tr>
<tr>
<td>
Phone #
</td>
<td>
@Html.TextBoxFor(model => model.PhoneNumber)
@Html.ValidationMessageFor(model => model.PhoneNumber, "*")
</td>
Когда я создаю эту страницу, я вижу, что атрибут Required активируется. Но атрибут DataType не запускается, если я ввел недопустимые данные. Я вижу исходный html и не вижу, чтобы какой-либо код испускался для этих валидаций.
У меня также есть часть моего взгляда.
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"/>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"/>
Ответы
Ответ 1
Смотрите это сообщение:
Является ли проверка валидации DataTypeAttribute в MVC2?
Важно отметить, что атрибут DataType обычно используется для форматирования, а не для проверки. Технически существует широкий спектр форматов электронной почты и форматов телефонных номеров (см. Здесь для электронной почты: http://www.regular-expressions.info/email.html).
Кроме того, пользовательские конвертеры могут быть созданы для преобразования, казалось бы, строк без электронной почты в электронные письма (я в домене dot com = [email protected]), и, таким образом, регулярные выражения проверки правильности вылетают из окна. Разработчику остается использовать правильное регулярное выражение для своей конкретной цели и гарантировать, что они принимают только адрес, который, по их мнению, является точным.
Ответ 2
Вы можете использовать ASP.NET MVC 3 Futures. Здесь - хорошая статья, описывающая там валидации:
public class UserInformation
{
[Required]
public string Name { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[Url]
public string Website { get; set; }
[Required]
[CreditCard]
public string CreditCard { get; set; }
[Required]
[FileExtensions(Extensions = "jpg,jpeg")]
public string Image { get; set; }
}
Ответ 3
В связи с этим вопросом есть некоторые сторонние аннотации для проверки достоверности данных для загрузки на http://dataannotationsextensions.org/
Ответ 4
У меня была аналогичная проблема. У меня была установка модели с типом данных электронной почты, но она не проверялась как электронная почта. Я заметил в html, что представление, созданное текстовым полем для адреса электронной почты, имело тип текста. Затем я изменил свое мнение, как показано ниже, и это зафиксировало это:
@Html.TextBoxFor(m => m.Email, new { type = "email" })
использовал jquery validate javascript libary