¿Asignar formato de fecha y hora con anotaciones de datos?


99

Tengo este atributo en mi modelo de vista:

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

Si quiero mostrar la fecha o llenar un cuadro de texto con la fecha, tengo estos:

<%: Model.StartDate %>

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

Siempre que se muestra la fecha, se muestra como: 01/01/2011 12:00:00 AM

Pero me gustaría mostrar solo 01/01/2011

¿Hay alguna forma de aplicar un formato de visualización con anotaciones de datos? No quiero tener que ir a todas las instancias donde muestro una fecha y agregar algún código para formatearla.


Respuestas:


149

Intente etiquetarlo con:

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

Intenté eso, todavía muestra la hora en el TextBox y cuando se muestra en la página.
Steven

3
@Steven: ¿Puedes intentar eliminar [DataType(DataType.DateTime)]si aún no lo has hecho?
David Fox

8
DisplayFormattrabaja solo con EditorFory DisplayForayudantes.
Ε Г И І И О

1
Gran respuesta: me faltaba el parámetro "ApplyFormatInEditMode".
CodeHxr

5
Pude resolver esto mediante el parámetro de formato en Html.TextBoxFor. Al establecerlo en @Html.TextBoxFor(model => model.YOUR_DATE, "{0:MM/dd/yyyy}"), pude obtener solo la fecha para mostrar. Encontré esto aquí [ stackoverflow.com/a/14529347/2938775] .
Caffeinius

44

¿Intentaste esto?

[DataType(DataType.Date)]

2
Esto también habilitará la compatibilidad con el selector de fechas HTML5, si el navegador lo admite.
AaronLS

24

En mvc 4 puede hacerlo fácilmente como seguir usando TextBoxFor..

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

Por lo tanto, no necesita usar ninguna anotación de datos en el modelo o la clase de modelo de vista


Sí, esas DataAnnotations funcionan muy bien para los ayudantes de EditorFor, pero, al renderizar una cuadrícula personalizada con un IEnumerable (Of Entity), debe usar .TextBoxFor y este fue mi problema. Gracias
bkwdesign

22

Si su campo de datos ya es un tipo de datos DateTime, no necesita usarlo [DataType(DataType.Date)]para la anotación; Solo usa:

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

en jQuery, use datepicker para su calendario

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

en su HTML, use EditorForhelper:

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

"Si su campo de datos ya es un tipo de datos DateTime, no necesita usar [DataType(DataType.Date)]" => eso fue útil
Hassan Tareq

Pero para la API web, el formato de visualización no se aplica DataFormatString = "{0:MM/dd/yyyy}"(no obtuve ningún 400, incluso el cuerpo de la solicitud tenía otro formato, es decir {"dob":"31/12/1990"})
Hassan Tareq

18

Aplicar DataAnnotation como:

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

10

Usa esto, pero es una solución completa:

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



1

Funciona para mi

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

0

establezca su propiedad usando el código siguiente en el momento de la creación del modelo, creo que su problema se resolverá ... y el tiempo no aparece en la base de datos. No es necesario agregar ninguna anotación.

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

            }
            set { dob = value; }
        }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.