Проверка аннотации данных электронной почты работает, но телефон не

Я использую аннотации данных в моем ASP.NET проект MVC4 для выполнения проверки на стороне клиента в полях электронной почты и телефона. Электронная почта успешно проверяется в клиенте, но телефон этого не делает - он позволяет мне вводить недопустимые символы и предупреждает меня только о представлении формы (а не сразу после ввода символа)

модели:

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

[Required(ErrorMessage = "Mobile is required")]
[DataType(DataType.PhoneNumber)]
[Phone]
[Display(Name = "Mobile number")]
public string Mobile { get; set; }

в представлении я считаю, что я включаю правильные ссылки на скрипт:

<script type="text/javascript" src="~/Scripts/jquery.validate.min.js" ></script
<script type="text/javascript" src="~/Scripts/jquery.validate.unobtrusive.min.js" ></script>

..и используя HTML helpers (я использую TextBoxFor, а не EditorFor, поскольку я применяю атрибуты класса, которые я опустил здесь для ясности)

@Html.LabelFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
@Html.TextBoxFor(model => model.Email, new { @type = "email" })       

@Html.LabelFor(model => model.Mobile)
@Html.ValidationMessageFor(model => model.Mobile)
@Html.TextBoxFor(model => model.Mobile, new { @type = "phone" }) 

что я упустил?

4 ответов


Я думаю, проблема в том, что типа телефон не поддерживается. См. поддержка типа телефона в w3schools


[Required(ErrorMessage = "Mobile is required")]
[RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Entered mobile format is not valid.")]
public string Mobile{get; set;}

он будет соответствовать номерам, как: 0123456789, 012-345-6789, (012)-345-6789 etc.


MVC 4 имеет встроенный шаблон отображения для EmailAddress, но не PhoneNumber. Вам нужно создать пользовательский DisplayTemplate для [DataType(DataType.PhoneNumber)].

добавьте следующий файл (вероятно, вам придется создать подпапку DisplayTemplates):
Views\Shared\DisplayTemplates\PhoneNumber.cshtml

@model System.String
@if (Model != null)
{
    @:@System.Text.RegularExpressions.Regex.Replace(@Model, "(\d{3})(\d{3})(\d{4})", "--")
}

используйте EditorFor insted TextBoxFor для электронной почты, тогда он даст ошибку ok keyup в поле электронной почты.