Los formatos de fecha en formularios de entrada - C #

votos
0

He estado siguiendo este tutorial para aprender ASP.NET MVC Core con Entity Framework. Mi problema es que cuando corro mi solución y tratar de añadir una nueva entrada en la tabla de los estudiantes usando mi navegador, impone automáticamente un formato de fecha en forma de MM / dd / aaaa, como se muestra aquí . Quiero que en el formato aaaa-MM-dd.

Mi modelo del estudiante es la siguiente:

public class Student
{
    public int StudentID { get; set; }
    [Required]
    [Display(Name = Last Name)]
    public string LastName { get; set; }
    [Required]
    [Display(Name = First Name)]
    public string FirstMidName { get; set; }
    [Display(Name = Enrollment Date)]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = {0:yyyy-MM-dd}, ApplyFormatInEditMode = true)]
    public DateTime EnrollmentDate { get; set; }

    public ICollection<Enrollment> Enrollments { get; set; }
}

Y en mi opinión, la fecha de entrada se lleva a cabo de la siguiente manera:

<div class=form-group>
    <label asp-for=EnrollmentDate class=control-label></label>
    <input asp-for=EnrollmentDate class=form-control />
    <span asp-validation-for=EnrollmentDate class=text-danger></span>
</div>

Lo que es aún más extraño es que el formato especificado funciona formularios de entrada externos, como aquí , en la página de índice en el que muestra todos los estudiantes en la tabla.

Me parece que no puede encontrar una solución para este problema en cualquier lugar, la mayoría de la gente simplemente dicen que añadir ApplyFormatInEditMode = trueen la anotación de datos y debería funcionar.

¡Cualquier ayuda se agradece, gracias por adelantado!

Publicado el 27/11/2018 a las 16:59
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
0

Este problema se produce debido a la [(DataType.Date) Tipo de datos] declaración sobre su EnrollmentDate. Cuando se representa la página, este elemento se convierte en

<input type="date">

Cuando el navegador ve esto impondrá su propio planificador de evento interno en el elemento de entrada si es compatible con ella. Aquí hay un buen enlace a toda la información en el sitio de Mozilla.

Un problema con esto es cada navegador tiene su propio estilo / convenciones, lo que hace para una experiencia de usuario a través de plataformas diferentes.

Se puede escribir un pequeño trozo de JavaScript para sobrescribir el tipo de datos en el cliente y vuelva a colocar el selector de fechas navegador con una común. En este ejemplo se acaba

$("input[type=date]")
    .datepicker({ dateFormat: "yy-m-d", changeYear: true, yearRange: "-4:+0" })
    .attr("type", "text");

Nótese cómo en la última línea se cambia el atributo de tipo de texto.

Y una cuestión es que se basa en la fecha formato de vista del modelo para la carga inicial y el javascript para usar el formato cuando datapicker.

Respondida el 27/11/2018 a las 21:00
fuente por usuario

votos
0

Sean T señaló que una solución ya existía aquí .

Al parecer, esto no tiene nada que ver con C # o nada, tiene que ver con la forma en que los navegadores manejan de entrada de fecha y tratar de utilizar un formato que el usuario está más familiarizado.

Por lo tanto, para cambiar este comportamiento en Google Chrome (el navegador que utilizo), he seguido estos pasos.

Como referencia, aquí están las instrucciones sobre cómo hacerlo en Firefox . No se pudo encontrar para Opera, y Edge parece que o bien no tienen una manera de cambiar esto, o no lo tenga atado con la configuración regional de Windows ( ver esto ).

Respondida el 27/11/2018 a las 18:19
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more