2012-03-19 51 views
6

我正在使用jQuery的datepicker和asp.net MVC4。 datepicker在Firefox中工作,但在IE7中,我通過asp.net驗證該字段不是日期,從而得到消息。如何解決jQuery datepicker的區域設置,使其適用於Firefox和IE7?

這是日期選擇

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

代碼這是在Web.config中

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

例如我的全球化設置在Firefox中,日期顯示爲「19/03/2012」字符串,並由asp.net的驗證設置(客戶端和服務器端)接受。在IE7中,客戶端不接受相同的日期字符串。如果我將其更改爲「2012年3月19日」,則客戶端接受日期,但隨後服務器將引發異常 - 「InvalidOperationException .Nullable對象必須具有值。」

我的viewModel使用了一個無效的DateTime,我將其轉換爲控制器後置操作中的不可空日期時間。這適用於Firefox,但在IE7中,來自viewModel的日期值爲null。問題是什麼?

+1

達林季米特洛夫有正確的答案,但也看看我的教程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 2012-03-19 19:17:01

+0

謝謝,我已經使用過你的精美教程,日期選擇器。但它並不涉及全球化問題。 – mrt181 2012-03-20 07:21:09

回答

13

下面這行什麼也不做:

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

,如果你不包括默認情況下不會在ASP.NET MVC 4模板包括corresponding language file

您可以嘗試明確設置的格式爲:

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

但這只是關注如何日期應該在日期選擇器選擇後進行格式化。它與驗證無關。

客戶端驗證由jquery.validate插件執行,該插件反過來使用瀏覽器當前配置的文化(這可能解釋您在FF和IE之間觀察到的差異,例如可能配置爲使用en-GB和另一個en-US)或ISO日期。

您可以覆蓋這個自定義的驗證,並使其使用自定義格式,以確保這將工作的跨瀏覽器:

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

如何在代碼中包含正確的datepicker語言文件?語言文件已經在我的腳本目錄的子目錄(i18n)中。 – mrt181 2012-03-20 07:18:19

+0

@ mrt181,對不起,我以爲你沒有這些文件。您將它們包括在內,就像包含任何JavaScript文件一樣:使用'script'標籤。 – 2012-03-20 07:20:17

+0

我的代碼是 ' ' – mrt181 2012-03-20 07:23:57

2

jQuery的本地化文件,請訪問:

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

簡單運行:

安裝包jQuery.UI.i18n和添加腳本參考 「腳本/ jQuery的UI-i18n.js」

從包管理器控制檯,那麼這將工作: $ .datepicker.setDefaults($ datepicker.regional ['EN-GB。 「]);

相關問題