Атрибут DataType.PhoneNumber не влияет на отображение

У меня есть [DataType(DataType.PhoneNumber)] в поле String в моей модели представления. Однако когда отображается номер телефона, он отображается как простая строка без форматирования.

Другое поле в моей модели представления имеет атрибут [DataType(DataType.Url)] и оно правильно отображается как элемент HTML.

У меня тогда два вопроса:

  1. Почему оформленное поле DataType.Url отображается правильно, а поле DataType.PhoneNumber выглядит как обычная строка символов без форматирования, характерного для телефона?

  2. Как я могу заставить PhoneNumber отображаться как действительный номер телефона (т. е. что-то вроде (xxx) xxx-xxxx. Если вы говорите мне, что я должен использовать атрибут DataFormat с DataFormatString, то какой смысл даже иметь DataType.PhoneNumber?


person Tom Baxter    schedule 18.06.2018    source источник
comment
›какой смысл вообще иметь DataType.PhoneNumber? чтобы сообщить мобильным браузерам, что это набираемый номер.   -  person Fran    schedule 18.06.2018


Ответы (1)


Для вашего первого вопроса URL-адреса имеют определенный синтаксис, который, если его не соблюдать, не будет правильным URL-адресом.

Телефонные номера не имеют определенного формата. только в США вы могли бы

ххх-ххх-хххх

(ххх) ххх-хххх

(ххх)ххх-хххх

ххх.ххх.хххх

1(ххх) ххх-хххх

Затем вы попадаете на международные номера с префиксами кода страны.

010 64 3 477 4000

0011 64 3 477 4000

+64 3 477 4000

Все это действительные номера телефонов

input="tel" позволяет встроить номер телефона, чтобы в браузере мобильного телефона (телефона) вы могли щелкнуть по нему, и он будет предварительно заполнен номером телефона в вашем номеронабирателе.

Что касается аннотаций данных, они отображают правильный html, у них будут правильные теги типа html5. Браузер должен фактически реализовать то, как это будет выглядеть на экране, или интерпретировать, как это должно быть проверено.

person Fran    schedule 18.06.2018
comment
Ваше первое замечание о различиях в форматах телефонных номеров, очевидно, правильное и объясняет, почему для телефонных номеров нет рендеринга по умолчанию. Ваша точка зрения о input=tel не имеет ничего общего с мобильными устройствами. Все браузеры, не только мобильные, могут использовать input=tel. У меня на рабочем столе установлен Skype, и нажатие на input=tel открывает Skype. Возможно, вы не видели сгенерированный HTML для DataType.PhoneNumber. Дело в том, что нет специального HTML или форматирования. Он отображается как обычная старая строка. - person Tom Baxter; 18.06.2018
comment
Я говорю, что единственное использование DataType.PhoneNumber - это вывод type='tel в ваш html. Вот и все. Браузер, скайп и т. д. должны это интерпретировать. - person Fran; 18.06.2018
comment
type=tel не генерируется в HTML. Поэтому браузер не может узнать, что это номер телефона. Кроме того, вы ошибаетесь в том, что единственное использование DataType.PhoneNumber - это рендеринг input=tel (чего он все равно не делает). Используя DataType.PhoneNumber, я могу настроить собственный шаблон отображения в файле с именем PhoneNumber.cshtml, который будет вызываться для всех полей, украшенных [DataType(DataType.PhoneNumber)]. - person Tom Baxter; 18.06.2018
comment
EditorFor() генерирует ‹input class=form-control text-box single-line id=PhoneNumber name=PhoneNumber type=tel value=›, когда вы декорируете свойство модели с помощью DateType.PhoneNumber - person Fran; 18.06.2018
comment
Мой вопрос был не о шаблонах редактора. Речь шла о шаблонах отображения. В моем приложении MVC 5 @Html.DisplayNameFor(model => model.PhoneNumber) создает 3125551212 с нулевой HTML-оболочкой, как обычная старая строка. - person Tom Baxter; 18.06.2018