Отладка формата DateTime - PullRequest
       1

Отладка формата DateTime

0 голосов
/ 24 марта 2020

Так что я боролся с форматами DateTime. Я делаю приложение ASP. NET MVC, и у меня есть свойство DateOfBooking типа DateTime. Это свойство записывает DateTime.Date.Now при отправке формы.

Ниже приведены мои свойства и DataAnotations, используемые для форматирования моей даты. Мне нужен формат дд / мм / гггг, но мой столбец в БД (MS SQL Server Managment Studio) имеет формат гггг-ММ-дд.

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime DateOfBooking { get; set; }

В любом случае, приведенный выше код позволил мне получить значение моего DateOfBooking внутри Html .EditorFor помощника (внутри Edit View, который является MVC шаблонным представлением), потому что без него мой помощник просто отображал бы (с датчиком выбора) dd / MM / yyyy, и теперь он показывает фактический значение, которое извлекается из БД.

Теперь из-за той строки кода над моей страницей указателя, которая представляет собой список бронирований, показывающих дату в формате yyyy-MM-dd, и именно здесь я застрял. К счастью, через час я нашел решение.

 @foreach (var item in Model) 
    {
    var date = item.DateOfBooking.ToString("dd/MM/yyyy");
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Course.CourseName)
        </td>
        <td> 
            @Html.DisplayFor(modelItem => date)
        </td>

После добавления var date все работает так, как я хочу. Но я не понимаю, почему я не могу просто go, как это: @Html.DisplayFor(modelItem => item.DateOfBooking.ToString("dd/MM/yyyy"))

Я хочу знать, почему не удалось EditorHelper правильно отобразить мою дату без [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)], и какая разница была добавлена ​​var date?

1 Ответ

1 голос
/ 24 марта 2020

Html.DisplayFor() имеет систему шаблонов, так что вы можете определить, как ваши данные должны отображаться во всем приложении.

Вы можете создать шаблон в Views/Shared/DisplayTemplates/DateTime.cshtml, который будет форматировать все свойства DateTime при вызове DisplayFor. например,

 // DateTime.cshtml
 @model System.DateTime
 @Model.ToString("dd/MM/yyyy")

Дополнительная информация https://exceptionnotfound.net/asp-net-mvc-demystified-display-and-editor-templates/

Другой способ сделать это - просто не использовать DisplayFor и просто выводить строку напрямую, например

@foreach (var item in Model) 
    {
    <tr>
        <td>
            @item.DateOfBooking.ToString("dd/MM/yyyy");
        </td>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...