registro pin electronico dar clave censo alta aeat c# jquery asp.net-mvc razor model-view-controller

c# - pin - Fecha de nacimiento validación sigue mostrando



registro clave aeat (2)

La razón de la validación del lado del cliente es que el complemento jquery.validate.js utilizado por jquery.validate.unobtrusive.js valida las fechas en función del formato MM/dd/yyyy y sus fechas de entrada 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 que esté utilizando, dará resultados diferentes (en Chrome, la 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, pero no la fecha que ingresaste)

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

Alternativamente, puede escribir su propio guión. 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 @Html.DatePickerFor() . El método de extensión agrega atributos html para el formato de fecha basado en la cultura del servidor y se lee con var format = regex.exec(this.inputFormat); línea de código que he comentado y reemplazado por su formato codificado. Si solo desea el formato dd/MM/yyyy , entonces el script puede simplificarse porque solo necesita el formato ''little-endian''

<script type="text/javascript"> // Override default date validator format to allow culture specific format $.validator.methods.date = function (value, element) { return this.optional(element) || globalDate(value).isValid(); }; globalDate = function (value) { // Initialise a new date var date = new Date(0); if (value == undefined) { // Return todays date return date; } // Get the components of the format // The separator can be forward slash, hyphen, dot and/or space var regex = new RegExp(/([dMy]+)([/s/.-]+)([dMy]+)([/s/.-]+)([dMy]+)/); //------------- see notes above //var format = regex.exec(this.inputFormat); var format = regex.exec(''dd/MM/yyyy''); //------------- // Get the components of the value regex = new RegExp(/(/d+)([/s/.-]+)(/d+)([/s/.-]+)(/d+)/); value = regex.exec(value); // Check the value is valid if (value === null || value[2] !== format[2] || value[4] !== format[4]) { // Its not valid date.setTime(Number.NaN); return date; } // TODO: What if year entered as 2 digits? var day = Number.NaN; var month = Number.NaN; var year = Number.NAN; if (format[1].charAt(0) === ''d'') { // little-endian (day, month, year) day = parseInt(value[1]); month = parseInt(value[3]) - 1; year = parseInt(value[5]); } else if (format[1].charAt(0) === ''M'') { // middle-endian (month, day, year) day = parseInt(value[3]); month = parseInt(value[1]) - 1; year = parseInt(value[5]); } else { // big endian (year, month, day) day = parseInt(value[5]); month = parseInt(value[3]) - 1; year = parseInt(value[1]); } date.setFullYear(year); date.setMonth(month); date.setDate(day); // Check its valid if (date.getDate() !== day || date.getMonth() !== month || date.getFullYear() !== year) { date.setTime(Number.NaN); return date; } return date; } // Methods Date.prototype.isValid = function () { return !isNaN(this.getTime()); } </script>

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

Estoy escribiendo un DOB - 22/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

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

En la MS SQL database el campo es: DateTime

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


Reemplazar con / en ambos lugares como Ganesh mencionó: atributo DisplayFormat Y atributo RegularExpression .