Atribuir formato de DateTime com anotações de dados?


99

Eu tenho este atributo em meu modelo de visualização:

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

Se eu quiser exibir a data ou preencher uma caixa de texto com a data, tenho o seguinte:

<%: Model.StartDate %>

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

Sempre que a data é exibida, ela é exibida como: 01/01/2011 12:00:00 AM

Mas eu gostaria de exibir apenas 01/01/2011

Existe uma maneira de aplicar um formato de exibição com anotações de dados? Não quero ter que ir a cada instância onde exibo uma data e adicionar algum código para formatá-la.


Respostas:


151

Tente marcá-lo com:

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

Acabei de tentar fazer isso, ele ainda exibe a hora no TextBox e quando é apenas exibido na página.
Steven,

3
@Steven: Você pode tentar remover [DataType(DataType.DateTime)]se ainda não o fez?
David Fox,

8
DisplayFormatfunciona apenas com ajudantes EditorFore DisplayFor.
Ε Г И І И О

1
Ótima resposta - estava faltando o parâmetro "ApplyFormatInEditMode".
CodeHxr

5
Consegui resolver isso pelo parâmetro de formato em Html.TextBoxFor. Ao definir como, @Html.TextBoxFor(model => model.YOUR_DATE, "{0:MM/dd/yyyy}")consegui obter apenas a data a ser exibida. Encontrado aqui [ stackoverflow.com/a/14529347/2938775] .
Caffeinius

44

Você tentou isso?

[DataType(DataType.Date)]

2
Isso também habilitará o suporte ao seletor de data HTML5, se o navegador for compatível.
AaronLS

24

No mvc 4, você pode fazer isso facilmente como seguir usando TextBoxFor..

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

Então, você não precisa usar nenhuma anotação de dados no modelo ou classe de modelo de vista


sim, essas DataAnnotations funcionam muito bem para os ajudantes EditorFor, mas, ao renderizar uma grade personalizada com um IEnumerable (Of Entity), você tem que usar o .TextBoxFor e esse era o meu problema. Obrigado
bkwdesign

22

Se o seu campo de dados já for um tipo de dados DateTime, você não precisa usar [DataType(DataType.Date)]para a anotação; Apenas use:

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

no jQuery, use datepicker para seu calendário

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

em seu HTML, use EditorForauxiliar:

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

"Se o seu campo de dados já for um tipo de dados DateTime, você não precisa usar [DataType(DataType.Date)]" => isso foi útil
Hassan Tareq

Mas para a API da web, o formato de exibição não é obrigatório DataFormatString = "{0:MM/dd/yyyy}"(não recebi nenhum 400, mesmo que o corpo da solicitação tivesse outro formato, ou seja {"dob":"31/12/1990"})
Hassan Tareq

18

Aplique DataAnnotation como:

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

10

Use isso, mas é uma solução completa:

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



1

Isso funciona para mim

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

0

defina sua propriedade usando o código abaixo no momento da criação do modelo, acho que seu problema será resolvido ... e o tempo não aparece no banco de dados. você não precisa adicionar nenhuma anotação.

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

            }
            set { dob = value; }
        }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.