Pregunta

Actualicé una aplicación web MVC 3 a MVC 4, siguiendo las instrucciones para Uppgrade manual. Todo salió bien y la aplicación se está ejecutando en IE9. Tengo formularios con campos de varios tipos de datos con la validación del lado del cliente y del lado del servidor y todos se procesan correctamente cuando se envía el formulario.

Pero cuando uso otro navegador, probado con Firefox 8, Chrome 15 y Safari 5.1.1, falla al validar los campos de la fecha. Estoy usando la cultura 'PT-PT' con fechas en el formato dd-mm-yyyy, y como dije, en IE9 pasan la validación, pero en los otros navegadores dice que el campo no es una fecha válida.

TIA

Joaquim

¿Fue útil?

Solución

Descubrí que el problema estaba en la validación de jQuery. Llama al constructor de fecha JavaScript para verificar si la fecha es válida:

    // http://docs.jquery.com/Plugins/Validation/Methods/date
    date: function(value, element) {
        return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
    },

Dado que el constructor de fecha de JavaScript espera una fecha en forma yyyy-mm-dd, devolvió inválido para las fechas en formato portugués dd-mm-yyy.

La excepción es, es decir, que no devuelve no válida, sino una fecha diferente de la que presentamos.

La solucción fue crear un jQuery.Validate-Pt.js con el código para anular la validación con la correcta para nuestro formato:

$.validator.methods.date = function (value, element) {
    return this.optional(element) || ( /^\d{1,2}[\/-]\d{1,2}[\/-]\d{4}(\s\d{2}:\d{2}(:\d{2})?)?$/.test(value)
        && !/Invalid|NaN/.test(new Date(value.replace("/", "-").split("-")[2], value.replace("/", "-").split("-")[1], value.replace("/", "-").split("-")[0])));
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top