Как я могу контролировать формат времени в поле ввода? - PullRequest
1 голос
/ 09 октября 2019

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

public DateTime ProjectStart { get; set; }

Если я хочу, чтобы время отображалось в 24-часовом формате в виде обычного текста на виде, я могу сделать это (с большой буквы ЧЧ):

@Model.ProjectStart.ToString("dd/MM/yyyy HH:mm")

Но как мне контролировать формат времени в поле ввода?

<input asp-for="ProjectStart" class="form-control" />

Время сохраняется в базе данных в 24-часовом формате. Это просто поле ввода, которое отображает его неправильно. Дата и время должны отображаться в следующем формате:

дд / мм / гггг ЧЧ: мм (например, 28/02/2019 17:45)

Культура моего приложения(CultureInfo.CurrentCulture) - nb-NO, что правильно. Стандартный формат даты и времени в этой культуре - это тот, который я пытаюсь отобразить в полях ввода. ( Норвежские форматы даты и времени )

ОБНОВЛЕНИЕ

Я попробовал два решения, но не повезло:

Украшениесвойство в viewmodel:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy HH:mm}")]

Добавление атрибута помощника тега asp-format во входной тег:

<!-- I tried several variations of this: -->
<input asp-for="ProjectStart" asp-format="{0:dd/MM/yyyy HH:mm}" class="form-control" />
<input asp-for="ProjectStart" asp-format="{0:dd.MM.yyyy HH:mm}" class="form-control" />
<input asp-for="ProjectStart" asp-format="{0:dd-MM-yyyy HH:mm}" class="form-control" />

Оба решения просто очистили значение в поле ввода, отображая только"мм / дд / гггг -: - -", т.е. формат не был изменен, а данные исчезли.

ОБНОВЛЕНИЕ 2

ЭтоHTML-код входного тега с атрибутом asp-format:

<input class="form-control" 
       type="datetime-local" 
       data-val="true" 
       data-val-required="The Starttidspunkt field is required." 
       id="ProjectStart" 
       name="ProjectStart"
       value="12.10.2019 07:12" />

Как видите, формат правильный, и данные есть. Но в моем браузере средство выбора даты отображает "мм / дд / гггг -: - -".

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Когда вы применяете атрибут [DataType(DataType.Date)], Razor визуализирует ввод с типом «дата». Это тип ввода HTML 5, он будет отображаться как элемент управления браузера (календарь, который вы получаете по умолчанию). Тем не менее, браузер контролирует, что дата будет отображаться локализованно (например, MM/dd/yyyy в США). То есть формат, отображаемый в броузере, зависит от локального формата даты.

Итак, еслиВы хотите показать формат dd/MM/yyyy, вам нужно изменить формат локальной системы. Вы можете обратиться к следующей ссылке, чтобы узнать, как изменить локальный формат даты.

Ссылка: https://www.moore.co.uk/msuk/moore-stephens-south/news/may-2016/has-upgrading-to-windows-10-affected-your-date-for

0 голосов
/ 09 октября 2019

Используйте атрибут атрибута тега asp-format, например:

asp-format="{0:dd/MM/yyyy HH:mm}"

<input asp-for="ProjectStart" class="form-control" asp-format="{0:dd/MM/yyyy HH:mm}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...