Назначить формат DateTime с аннотациями данных?


99

У меня есть этот атрибут в моей модели представления:

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

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

<%: Model.StartDate %>

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

Всякий раз, когда отображается дата, она отображается следующим образом: 01/01/2011 12:00:00 AM.

Но я бы хотел отображать только 01.01.2011

Есть ли способ применить формат отображения с аннотациями к данным? Я не хочу переходить к каждому экземпляру, где отображается дата, и добавлять код для ее форматирования.


Ответы:


153

Попробуйте пометить его:

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

Только что попробовал, он по-прежнему отображает время в текстовом поле и когда оно просто отображается на странице.
Стивен,

3
@Steven: Можете попробовать удалить, [DataType(DataType.DateTime)]если еще не сделали?
Дэвид Фокс,

8
DisplayFormatработает только с EditorForи DisplayForпомощниками.
Ε Г И І И О

1
Отличный ответ - мне не хватало параметра «ApplyFormatInEditMode».
CodeHxr 07

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 используйте datepicker для своего календаря

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

в вашем HTML используйте EditorForпомощник:

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

«Если ваше поле данных уже является типом данных DateTime, вам не нужно использовать [DataType(DataType.Date)]» => это было полезно,
Хасан Тарек

Но для веб-api формат отображения не применяется DataFormatString = "{0:MM/dd/yyyy}"(не {"dob":"31/12/1990"}
Hassan Tareq


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.