Призначити формат DateTime з анотаціями даних?


99

Я маю цей атрибут у своїй моделі перегляду:

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

Якщо я хочу відобразити дату або заповнити текстове поле з датою, у мене є такі:

<%: Model.StartDate %>

<%: Html.TextBoxFor(m => m.StartDate) %>

Щоразу, коли дата відображається, вона відображається так: 01.01.2011 12:00:00

Але я хотів би показати 01.01.2011

Чи є спосіб застосувати формат відображення до анотацій даних? Мені не хочеться переходити до кожного екземпляра, де я показую дату, і додаю якийсь код, щоб відформатувати її.


Відповіді:


149

Спробуйте позначити його за допомогою:

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

Щойно спробувавши це, він все ще відображає час у TextBox і коли він просто відображається на сторінці.
Стівен

3
@Steven: Чи можете ви спробувати видалити, [DataType(DataType.DateTime)]якщо ви ще цього не зробили?
Девід Фокс

8
DisplayFormatпрацює тільки з EditorForі DisplayForпомічниками.
Ε Г І І І О

1
Чудова відповідь - мені не вистачало пармуму "ApplyFormatInEditMode".
CodeHxr

5
Мені вдалося вирішити це за допомогою параметра формату в Html.TextBoxFor. Встановивши його, @Html.TextBoxFor(model => model.YOUR_DATE, "{0:MM/dd/yyyy}")я зміг отримати лише дату для відображення. Знайшли це тут [ stackoverflow.com/a/14529347/2938775] .
Caffeinius

44

Ви пробували це?

[DataType(DataType.Date)]

2
Це також увімкне підтримку селектора HTML5 дати, якщо браузер його підтримує.
AaronLS

24

У mvc 4 ви можете легко це зробити, як і далі, використовуючи TextBoxFor..

@Html.TextBoxFor(m => m.StartDate, "{0:MM/dd/yyyy}", new { @class = "form-control default-date-picker" })

Отже, вам не потрібно використовувати анотацію даних у моделі чи перегляді модельного класу


Так, ці DataAnnotations чудово працюють для помічників EditorFor, але, коли ви надаєте користувацьку сітку з IEnumerable (Of Entity), ви повинні використовувати .TextBoxFor, і це було моєю проблемою. Дякую
bkwdesign

22

Якщо у вашому полі даних уже є тип даних DateTime, вам не потрібно використовувати [DataType(DataType.Date)]для анотації; просто використовуйте:

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

на jQuery використовуйте підбірник дат для вашого календаря

    $(document).ready(function () {
        $('#StartDate').datepicker();
    });

у своєму HTML використовуйте EditorForпомічник:

    @Html.EditorFor(model => model.StartDate)

"Якщо у вашому полі даних уже тип даних DataTime, вам не потрібно використовувати [DataType(DataType.Date)]" =>, що було корисно
Хассан Тарек

Але для веб-api формат відображення не застосовує DataFormatString = "{0:MM/dd/yyyy}"(не отримав 400, навіть орган запиту мав інший формат, тобто {"dob":"31/12/1990"})
Хассан Тарек

18

Застосувати DataAnnotation так:

[DisplayFormat(DataFormatString = "{0:MMM dd, yyyy}")]

10

Використовуйте це, але це повне рішення:

[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]




0

встановіть свою власність за допомогою наведеного нижче коду під час створення моделі. Я думаю, що ваша проблема буде вирішена .. і час не відображається в базі даних. Вам не потрібно додавати анотацію.

private DateTime? dob;
        public DateTime? DOB
        {
            get
            {
                if (dob != null)
                {
                    return dob.Value.Date;
                }
                else
                {
                    return null;
                }

            }
            set { dob = value; }
        }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.