Клиентская проверка даты ввода типа не работает - PullRequest
7 голосов
/ 15 декабря 2011

У меня есть форма, содержащая поле даты и даты и времени:

@Html.TextBoxFor(model => model.A, new { @type = "datetime" })
@Html.TextBoxFor(model => model.B, new { @type = "date" })

Модель:

public class TestModel
{
  [DataType(DataType.Date)]
  public DateTime A {get;set;}

  [DataType(DataType.Date)]
  public DateTime B {get;set;}
}

При использовании этих типов ввода iPad отображает удобные средства выбора даты (времени).Поля проверяются с использованием проверки на стороне клиента.Для поля даты и времени (A) это работает, но поле даты (B) вызовет ошибку: «пожалуйста, введите правильную дату».Как мне решить эту проблему?

Примеры:

  • Это значение iPad (Safari) для datetime действительно (согласно проверке на стороне клиента MVC): 15 дек.2011 9: 20
  • Недопустимое значение iPad (Safari) для даты: 15 дек.2011

Трудно отлаживать код на iPad, поэтому я понятия не имею, как Safari меняет формат даты при настройке атрибута значения ввода.

Редактировать: я обнаружил формат даты и времениуниверсальный формат даты и времени (yyyy-MM-DDTHH:mmZ), а формат даты - yyyy-MM-dd.Вероятно, клиентский валидатор действительно понимает универсальную дату-время, а не yyyy-MM-dd из-за локализации.

1 Ответ

5 голосов
/ 24 декабря 2011

У меня была точно такая же проблема, и я был безумен при просмотре мобильного сайта, который я разрабатываю на моем iPhone. Обсуждение в проблеме ниже решило это для меня.

https://github.com/jzaefferer/jquery-validation/issues/20.

Кроме того, чтобы без проблем справиться с этим, я создал следующий шаблон бритвенного редактора для типов данных Date:

@model DateTime?
@Html.TextBox("myDate", ViewData.Model.ToIso8601FullDate(), new { type = "date", @class = "text-box single-line" })

и удобный метод расширения для ввода типа ввода html 5 в формате, с которым он работает в соответствии со спецификацией для типа ввода = дата :

public static string ToIso8601FullDate(this DateTime? d)
{
    if (!d.HasValue) return null;

    return d.Value.ToString("yyyy-MM-dd");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...