2013-11-01 7 views
9

Я использую аннотации данных в моем проекте 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 хелперы (я использую 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" }) 

Что мне не хватает?

ответ

0

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

+0

Возможно, было бы лучше спросить OP (используя комментарий), какой тип телефона используется; это может быть поддерживаемый тип, в этом случае это не ответ ... – einpoklum

+0

@OzAnt - вы говорите, что вместо type = "phone" я должен использовать новый тип = "tel" ?? –

+0

@LiamWeston - Не совсем: w3schools говорит, что HTML5 определяет тип ввода телефона с типом = tel, а не с телефоном, НО этот тип не поддерживается ни одним браузером (поскольку, по моему мнению, в каждой стране номера телефонов различны). Таким образом, вам может быть лучше проверить свой номер телефона с вашим собственным регулярным выражением в вашей модели и применить его на стороне клиента. Похоже, что это скорее намек, так как iPhone распознает type = "tel" и полностью меняет клавиатуру на стандартную клавиатуру телефона, см. [Link] http://html5doctor.com/html5-forms-input-types/#input -tel – OzAnt

6
[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;} 

Это будет соответствовать номера типа:, 012-345-6789, (012) -345-6789 и т.д.

2

MVC 4 имеет встроенный шаблон отображения для EmailAddress, но не Номер телефона. Вам необходимо создать пользовательский 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})", "$1-$2-$3") 
} 
0

использование EditorFor InstEd из TextBoxFor для электронной почты, то он будет дает ошибку ОК KeyUp в поле Электронная почта.

+0

@ Html.LabelFor (модель => model.Email) @ Html.ValidationMessageFor (модель => model.Email) @ Html.EditorFor (модель => model.Email) Используйте это для электронной почты Validations –

Смежные вопросы