MVC Razor view отображает неверное значение времени объекта DateTime - PullRequest
0 голосов
/ 22 января 2020

У меня есть объект Order, который содержит два атрибута DateTime с именами LendDate и ReturnDate, как показано ниже:

public class Order
{
    public DateTime LendDate { get; set; }
    public DateTime ReturnDate { get; set; }
}

Я отображаю список этих объектов в виде индекс basi c, автоматически сгенерированный ASP. Net, например:

foreach (var item in Model.orderList)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.LendDate)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ReturnDate)
        </td>
        <td>
            @Html.ActionLink(ResGlobal.Details, "Details", new { id = item.OrderID })
        </td>
    </tr>
}

У меня есть шаблон отображения (Views\Shared\DisplayTemplates\DateTime.cshtml), который должен обеспечить правильный формат для объектов datetime (Я проверил это, изменив формат вокруг, и он отлично работает). Выглядит это так:

@String.Format("{0:dd-MM-yyyy hh:mm tt}", Model.Date)

Проблема здесь в том, что он показывает время даты объекта в качестве правильной даты, но время всегда устанавливается в 12:00.

Я проверил базу данных и отладил код, и правильные даты и время успешно переданы в представление, поэтому почему он настаивает на установке времени в 12:00?

Если я изменяю формат вокруг, я иногда получаю время 00:00 вместо 12:00, что не помогает.

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

<td>
    @Html.DisplayFor(modelItem => item.LendDate.Day)-@Html.DisplayFor(modelItem => item.LendDate.Month)-@Html.DisplayFor(modelItem => item.LendDate.Year) @Html.DisplayFor(modelItem => item.LendDate.Hour):@Html.DisplayFor(modelItem => item.LendDate.Minute)
</td>

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

Я хочу, чтобы представление отображало дд-мм-гггг чч: мм

1 Ответ

1 голос
/ 22 января 2020

Это из-за вашего шаблона отображения: вы передаете только часть даты в функцию string.Format. Попробуйте просто передать модель (ваш объект даты и времени) следующим образом:

@String.Format("{0:dd-MM-yyyy hh:mm tt}", Model)

Также ИМХО чище просто вызывать метод .ToString(string format) для объекта даты:

@Model.ToString("dd-MM-yyyy hh:mm tt")

Другой способ форматирования дат - создание класса модели представления и использование атрибута [DisplayFormat] для указания формата даты и времени (он также должен работать для EditorFor).

...