Datepicker на страницах бритвы всегда отображается пустым - PullRequest
0 голосов
/ 13 сентября 2018

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

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

Затем в представлении:

<input asp-for="DateUploaded" class="form-control" value="@DateTime.Now.ToString("yyyy-MM-dd HH:mm")" />

Но средство выбора даты всегда выглядит пустым, например,Я хочу, чтобы он автоматически загружал текущую дату и время с точностью до минуты:

enter image description here Хотя источник показывает, что есть значение.что заставляет меня верить, что это может быть связано с jquery, но я понятия не имею, что это может быть, и я даже не уверен, что искать.Попытки до сих пор не дали решения.

<input class="form-control" value="2018-09-13 13:36" type="datetime-local" data-val="true" data-val-required="The DateUploaded field is required." id=" name="DateUploaded" />

К модели я также попытался добавить следующее без результата:

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

1 Ответ

0 голосов
/ 13 сентября 2018

Во-первых, когда вы связываетесь со свойством типа DateTimeDataType из DateTime), InputTagHelper будет отображать вход с типом datetime-local. Это заставит поддерживающие браузеры отображать элемент управления DatePicker, который вы видите здесь. Однако этот встроенный элемент управления работает только со значениями даты / времени в формате ISO, которым не является ваша строка даты и времени. Если строка не может быть проанализирована как дата / время ISO, она обрабатывается как ноль, и поэтому никакое значение не отображается.

Короче говоря, вам нужно указать строку типа datetime, например: yyyy-MM-dd\Thh:mm:ss или просто o.

@DateTime.Now.ToString("o")

Во-вторых, при привязке к определенному свойству (используя asp-for) не следует указывать значение вручную. Вместо этого, если вы хотите, чтобы свойство по умолчанию имело значение DateTime.Now, установите его как значение по умолчанию для свойства:

[DataType(DataType.DateTime)]
public DateTime DateUploaded { get; set; } = DateTime.Now;

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

Наконец, использование DateTime.Now - очень плохая идея для веб-приложения. Значение будет текущим временем на сервере , и почти наверняка не будет «сейчас» для пользователя, если только он не окажется в том же часовом поясе, что и ваш сервер. Вместо этого используйте DateTime.UtcNow или даже лучше DateTimeOffset.UtcNow.

...