El valor especificado no se ajusta al formato requerido aaaa-MM-dd

Tengo una aplicación .Net MVC 5 que utiliza anotaciones de datos, Entity-Framework Jquery 2.1.3 y Jquery UI 1.11.4.

Cuando renderizo un formulario de edición con una entrada de tipo fecha usando el formato del Reino Unido “dd / MM / YYYY”; aparece el siguiente mensaje de error cuando se usa Google Chrome:

El valor especificado ’10 / 10/2001 ‘no se ajusta al formato requerido,’ aaaa-MM-dd ‘. jquery-2.1.3.js: 5317

Modelo

public class MyModel { [Column(TypeName = "date"), DataType(DataType.Date), Display(Name = "My date")] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")] public string MyDate { get; set; } } 

Margen

  

El valor se establece correctamente en el control de entrada, pero la fecha no aparece en el navegador. Primero pensé que esto era un problema con jQuery ya que está apareciendo el archivo de script jQuery, pero cuando se prueba en IE y Firefox todo está funcionando bien.

Luego asumí que era mi entorno regional en Chrome porque, por defecto, Chrome piensa que todo el mundo está en Estados Unidos, cambié la configuración regional a Reino Unido y aún aparece el mismo problema.

Una solución simple sería cambiar el formato en mi modelo a universal, pero para los usuarios del Reino Unido esto es un poco extraño.

¿Hay alguna manera de decirle a Chrome que acepte formatos de fecha en “dd / MM / YYYY”?

Las especificaciones para el selector de fecha HTML5 indican que la fecha debe tener el formato yyyy-MM-dd (formato ISO). Esto significa que DisplayFormatAttribute debe ser

 [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] public string MyDate { get; set; } 

Alternativamente, puede agregar manualmente el formato usando

 @Html.TextBoxFor(m => m.MyDate, "{0:yyyy-MM-dd}", new { @type = "date" }) 

La última opción le permite mantener DataFormatString = "{0:dd/MM/yyyy}") para usar en @Html.DisplayFor()

Me gustaría resaltar algo en la respuesta aquí.

Si está comstackndo una aplicación que tiene Globalización y Localización, entonces será mejor el método de pasar un formato con ayuda de Html. También puede usar EditorFor y pasar la identificación o clase necesaria para datepicker.

Establezca el atributo de type en texto.

 @Html.TextBoxFor(m => m.MyDate, new { @type = "text" }) 

El problema podría ser del tipo = “fecha”. Esa era mi situación de todos modos. Funcionó una vez que se cambió a type = “text”. Si la interfaz está construida con un contenedor MVC, debe reemplazar o establecer el atributo html en consecuencia.