MVC DateTime Validación – Formato de fecha del Reino Unido

Tengo una vista simple con dos campos de fecha con ValidationMessageFor controles agregados para la validación de JavaScript discreta.

Mi problema es que me siguen diciendo que mi fecha no es válida, cuando está en formato correcto (dd / MM / aaaa)

He agregado a mi web.config, y también se ha incluido [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] en cada propiedad DateTime, pero aún así no aceptará las fechas de formato en el Reino Unido.

¿Hay algo obvio que me falta aquí?

En realidad, solo necesitas sobrecargar el método de validación de JavaScript no intrusivo para la fecha

 jQuery(function ($) { $.validator.addMethod('date', function (value, element) { if (this.optional(element)) { return true; } var ok = true; try { $.datepicker.parseDate('dd/mm/yy', value); } catch (err) { ok = false; } return ok; }); }); 

¡El ejemplo de Bohdan funcionó! Tengo +1 tu respuesta compañero.

Para completar, he escrito una publicación de blog sobre cómo integrar todas las partes (Modelo, Vista, EditorTemplate personalizado, jQuery incluye y agrega la solución de Bohdan).

Puedes leerlo aquí: http://www.kestrelblackmore.com/blog/jquery-datepicker-mvc4

Sé que es viejo pero al usar esto agregué a la entrada un atributo con el formato de fecha actual (que obtuve del código ASP MVC con CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.ToLower ()).

Luego reescribí la validación javascript para usar el formato encontrado en el atributo.

  var format = "mm/dd/yyyy"; if (element.attributes["data-format"]) { format = element.attributes["data-format"].value; } 

También leí el mismo atributo para jquery ui datepicker. Puede que no sea tan útil, pero puede mantener el formato coherente con la cultura al menos. Aunque podría ayudar a alguien

He tomado un enfoque diferente para resolver esto en comparación con otras respuestas. Use jQuery para agregar una nueva función de fecha que forzará la fecha para usar el conjunto de cultura local actual en la aplicación.

 $.validator.addMethod('date', function (value, element) { var d = new Date(); return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value))); }); 

Eso es si falla en la validación de jQuery. Doy crédito a esta respuesta a la publicación de Elton Stoneman que se puede leer aquí

Espero que esto ayude a alguien más.

Intente cambiar esto directamente en jquery.validate.js. Trabaja con $ .datpicker

 date: function (value, element) { var s = value; var ind2 = 3; var ind3 = 6; var ind4 = 4; if (s.substr(6, 1) != "2") { ind2 = ind2 + 1; ind3 = ind3 + 1; ind4 = ind4 + 1; } var ndan = s.substr(0, 2); var nmje = s.substr(ind2, 2); var ngod = s.substr(ind3, ind4); var ns = ngod + "," + nmje + "," + ndan; return this.optional(element) || !/Invalid|NaN/.test(new Date(ns));