Указанное значение не соответствует требуемому формату yyyy-MM-dd
У меня есть приложение .Net MVC 5, которое использует аннотации данных, Entity-Framework JQuery 2.1.3 и JQuery UI 1.11.4.
Когда я создаю форму редактирования с вводом даты типа с использованием британского формата "dd/MM/YYYY"; при использовании Google Chrome появляется следующее сообщение об ошибке:
Указанное значение "10/10/2001" не соответствует требуемому формату "yyyy-MM-dd". JQuery-2.1.3.js: 5317
Model
public class MyModel
{
[Column(TypeName = "date"), DataType(DataType.Date), Display(Name = "My date")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
public string MyDate { get; set; }
}
Отметить
<input class="text-box single-line" data-val="true" data-val-date="The field My date must be a date." id="MyDate" name="MyDate" type="date" value="10/10/2001" />
Значение правильно установлено в элементе управления ввода, но дата не отображается в браузере. Сначала я подумал, что это проблема с jQuery, поскольку она появляется в файле jQuery script, но при тестировании в IE и Firefox все работает нормально.
Тогда я предположил, что это моя региональная настройка в хром, поскольку по умолчанию Chrome считает, что все англичане в Америке, я изменил региональные настройки в Великобритании, и по-прежнему появляется одна и та же проблема.
Простое исправление будет состоять в том, чтобы изменить формат моей модели на универсальный, но для пользователей в Великобритании это немного чужой.
Можно ли указать хром, который принимает форматы даты в "dd/MM/YYYY"?
Ответы
Ответ 1
В спецификациях для выбора даты HTML5 указано, что дата должна быть в формате yyyy-MM-dd
(формат ISO). Это означает, что вы DisplayFormatAttribute
должны быть
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public string MyDate { get; set; }
В качестве альтернативы вы можете вручную добавить формат, используя
@Html.TextBoxFor(m => m.MyDate, "{0:yyyy-MM-dd}", new { @type = "date" })
Более поздняя опция позволяет сохранить DataFormatString = "{0:dd/MM/yyyy}")
для использования в @Html.DisplayFor()
Ответ 2
Вы можете использовать InputTagHelper.Format
<input asp-for="MyDate" asp-format="{0:yyyy-MM-dd}" />
https://docs.asp.net/projects/api/en/latest/autoapi/Microsoft/AspNetCore/Mvc/TagHelpers/InputTagHelper/#prop-Microsoft.AspNetCore.Mvc.TagHelpers.InputTagHelper.Format