Форматы даты в формах ввода - C # - PullRequest
0 голосов
/ 27 ноября 2018

Я следовал этому руководству по изучению ASP.NET Core MVC с Entity Framework.Моя проблема заключается в том, что когда я запускаю свое решение и пытаюсь добавить новую запись в таблицу студентов с помощью моего браузера, он автоматически накладывает формат даты в виде MM / dd / yyyy, как показано здесь .Я хочу это в формате гггг-мм-дд.

Моя модель ученика выглядит следующим образом:

public class Student
{
    public int StudentID { get; set; }
    [Required]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }
    [Required]
    [Display(Name = "First Name")]
    public string FirstMidName { get; set; }
    [Display(Name = "Enrollment Date")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime EnrollmentDate { get; set; }

    public ICollection<Enrollment> Enrollments { get; set; }
}

И, на мой взгляд, ввод даты осуществляется следующим образом:

<div class="form-group">
    <label asp-for="EnrollmentDate" class="control-label"></label>
    <input asp-for="EnrollmentDate" class="form-control" />
    <span asp-validation-for="EnrollmentDate" class="text-danger"></span>
</div>

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

Я могуПохоже, что нигде не найдено решение этой проблемы, большинство людей просто говорят добавить ApplyFormatInEditMode = true к аннотации данных, и оно должно работать.

Любая помощь приветствуется, заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Эта проблема возникает из-за объявления [DataType (DataType.Date)] в вашей EnrollmentDate.Когда страница отображается, этот элемент преобразуется в

<input type="date">

Когда браузер видит это, он налагает свой собственный внутренний указатель даты на элемент ввода, если он его поддерживает.Вот хорошая ссылка на всю информацию на сайте Mozilla.

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

Вы можете написать небольшой кусочек JavaScript для перезаписи типа данных наклиент и замените браузер DatePicker на общий.В этом примере просто

$("input[type=date]")
    .datepicker({ dateFormat: "yy-m-d", changeYear: true, yearRange: "-4:+0" })
    .attr("type", "text");

Обратите внимание, как в последней строке мы меняем атрибут типа на текст.

И одна из проблем заключается в том, что он использует форматирование даты модели представления для начальной загрузки и форматирование javascript при использовании сборщика данных.

0 голосов
/ 27 ноября 2018

Шон Т указал, что решение уже существует здесь .

Очевидно, что это не имеет ничего общего с C # или чем-то еще, это связано с тем, как браузеры обрабатывают ввод даты и пытаютсяиспользовать формат, с которым пользователь более знаком.

Итак, чтобы изменить это поведение в Google Chrome (браузере, который я использую), я следовал этим шагам.

Для справки, вот инструкции о том, как это сделатьв Firefox .Не удалось найти Opera, и Edge, похоже, либо не может изменить это, либо связан с региональными настройками Windows ( см. ).

...