2012-03-19 22 views
6

Estoy usando jQuery 's datepicker y asp.net MVC4. El datepicker funciona en Firefox pero en IE7 recibo el mensaje a través de la validación de asp.net de que el campo no es una fecha.¿Cómo arreglar la configuración regional de jQuery datepicker para que funcione en Firefox e IE7?

Este es el código para el selector de fechas

if (!Modernizr.inputtypes.date) { 
     $(function() { 
      $.datepicker.setDefaults($.datepicker.regional['en-GB']); 
      $(".datefield").datepicker(); 
     }); 
    } 

Esta es mi configuración de la globalización en Web.config

<globalization uiCulture="en-GB" culture="en-GB" />

P. ej en Firefox, la fecha se muestra como una cadena "19/03/2012" y es aceptada por la configuración de validación de asp.net (del lado del cliente y del servidor). En IE7, la misma cadena de fecha no se acepta en el cliente. Si lo cambio a "19/03/2012", el cliente acepta la fecha, pero luego el servidor arroja una excepción: "InvalidOperationException. El objeto Nullable debe tener un valor".

Mi viewModel utiliza un DateTime anulable que lanzo a un DateTime no nulo en la acción de publicación de los controladores. Esto funciona en Firefox pero en IE7 el valor para la fecha de viewModel es nulo. ¿Cuál es el problema?

+1

Darin Dimitrov tiene la respuesta correcta, pero también mira mi tutorial http://www.asp.net/mvc/tutorials/javascript/using-the-html5-and-jquery-ui-datepicker-popup-calendar- with-aspnet-mvc/using-the-html5-and-jquery-ui-datepicker-popup-calendar-with-aspnet-mvc-part-1 – RickAndMSFT

+0

Gracias, ya he usado su excelente tutorial para llegar tan lejos con el selector de fechas.Pero no se ocupa de los problemas de la globalización. – mrt181

Respuesta

13

La siguiente línea no hace nada:

$.datepicker.setDefaults($.datepicker.regional['en-GB']); 

si no se incluye el corresponding language file que no se incluye por defecto en la plantilla ASP.NET MVC 4.

Es posible que intente ajustar el formato de forma explícita:

$.datepicker.setDefaults({ dateFormat: 'dd/mm/yy' }); 

Pero esto sólo se refiere a cómo la fecha deben tener el formato después de haberlo seleccionado en el selector de fechas. No tiene nada que ver con la validación.

La validación del lado del cliente se realiza mediante el complemento jquery.validate que a su vez utiliza el navegador configurado actualmente cultura (que podría explicar las discrepancias que está observando entre FF e IE, por ejemplo, uno podría estar configurado para usar en-GB y el otro en-US) o fechas ISO.

Se puede anular esta validación personalizada y hacer que use el formato personalizado para asegurarse de que esto funcionará navegadores:

if (!Modernizr.inputtypes.date) { 
    $(function() { 
     $.datepicker.setDefaults({ dateFormat: 'dd/mm/yy' }); 
     $('.datefield').datepicker(); 
    }); 

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

¿Cómo incluyo el archivo de idioma datepicker correcto en el código? Los archivos de idioma ya están en un subdirectorio (i18n) de mi directorio de Scripts. – mrt181

+0

@ mrt181, ah, lo siento, pensé que no tienes esos archivos. Los incluye de la misma manera que incluiría cualquier archivo javascript: utilizando la etiqueta 'script'. –

+0

tengo esto en mi código ' ' – mrt181

2

archivos de localización Jquery están disponibles en:

http://nuget.org/packages/jQuery.UI.i18n

simplemente ejecutar:

Install-Package jQuery.UI.i18n y añadir una referencia a la escritura "Scripts/jquery-ui-i18n.js"

desde la consola del gestor de paquetes, entonces esto va a funcionar: $ .datepicker.setDefaults ($ datepicker.regional [ 'es-ES. ']);

Cuestiones relacionadas