Аннотации по электронной почте/телефону 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