La validación de la fecha de nacimiento sigue mostrándose

Estoy escribiendo un DOB22/12/1986 en mi cuadro de texto y la validación sigue disparando. Dice:

The field DOB must be a date.

Mi MODELO :

 [System.ComponentModel.DisplayName("DOB")] [DisplayFormat(DataFormatString = "@{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] [Required(ErrorMessage = "Date Of Birth is required")] [RegularExpression(@"{0:dd/MM/yyyy}", ErrorMessage = "Invalid Date")] // below is a link public DateTime DOB { get; set; } 

Mi VISTA :

 
@Html.LabelFor(model => model.DOB, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.DOB, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.DOB, "", new { @class = "text-danger" })

En la MS SQL database el campo es: DateTime

¿Por qué mi validación dice que la fecha en la que escribo no es válida?

El motivo de la validación del lado del cliente es que el complemento jquery.validate.js utilizado por jquery.validate.unobtrusive.js valida las fechas basadas en el formato MM/dd/yyyy y sus fechas de entrada basadas en un formato dd/MM/yyyy .

El código específico utilizado en jquery.validate.js para la validación es

 date: function(value, element) { return this.optional(element) || !/Invalid|NaN/.test(new Date(value)); } 

que dependiendo del navegador, su uso dará resultados diferentes (en Chrome, new Date('22/12/1986') 1987-10-11T13:30:00.000Z new Date('22/12/1986') devuelve Invalid Date pero en FireFox devuelve 1987-10-11T13:30:00.000Z que es válido, simplemente no la fecha en que ingresó)

$.validator anular el $.validator para formatear las fechas en su cultura. Una opción es usar el plugin jquery.globalize .

Alternativamente, puede escribir su propia secuencia de comandos. Tenga en cuenta que el siguiente script se toma de mi propio complemento utilizado junto con un método de extensión @Html.DatePickerFor() que genera un datepicker. El método de extensión agrega atributos html para el formato de fecha basado en la cultura del servidor y se lee con el var format = regex.exec(this.inputFormat); línea de código que he comentado y reemplazado con su formato codificado. Si solo desea el formato dd/MM/yyyy , entonces el script se puede simplificar porque solo necesita el formato ‘little-endian’

  

Nota al [RegularExpression] : su atributo [RegularExpression] no hace nada y puede eliminarse.

Reemplazar con / en los lugares mencionados por Ganesh – Atributo DisplayFormat Y atributo RegularExpression .