Назначить формат 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

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

Стивен
источник
4
дублировать? stackoverflow.com/questions/1961114/date-only-from-textboxfor
Дэвид Фокс,

Ответы:

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)]
rk1962
источник
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
18

Примените DataAnnotation как:

[DisplayFormat(DataFormatString = "{0:MMM dd, yyyy}")]
Чираг
источник
10

Используйте это, но это полное решение:

[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
Ренатто Мачадо
источник
4

Используйте EditorFor вместо TextBoxFor

сговор
источник
1

Это подходит для меня

[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
ФеликсАверас
источник
0

установите свое свойство, используя приведенный ниже код, во время создания модели, я думаю, ваша проблема будет решена .. и время не отображается в базе данных. вам не нужно добавлять аннотацию.

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

            }
            set { dob = value; }
        }

источник