¿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.

Steven
fuente

Respuestas:

149

Intente etiquetarlo con:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
David Fox
fuente
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)]
rk1962
fuente
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

Hasib Hasan Arnab
fuente
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)
Toddt
fuente
"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}")]
Chirag
fuente
10

Usa esto, pero es una solución completa:

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

Utilice EditorFor en lugar de TextBoxFor

colusiónbdbh
fuente
1

Funciona para mi

[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
FelixAVeras
fuente
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; }
        }

fuente