2013-10-22 77 views
7

我有一個應用程序,我最近已升級到.net 4.5.1和MVC 4.我使用jQuery datepicker和jQuery。驗證1.11.1。jQuery日期驗證MVC 4 .Net 4.5.1英國日期「必須是日期」錯誤

我在英國,因此日期將採用en-GB語言環境(「dd/mm/yyyy」)。我曾嘗試過建議hereherehere,但無濟於事。

我也有我的web.config:

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

,並在IIS中的全球化設置爲en-GB,但每次輸入日期被確認爲美國格式的日期。

任何人都可以幫忙嗎?

+0

我有同樣的問題,而一年前,找不到問題的一個恰當的解決方案,因爲周圍的工作,我禁用了MVC的客戶端驗證,爲'required'編寫了我自己的自定義驗證並將輸入日期字段設置爲'readonly',以便用戶無法修改使用'datepicker'提供的日期 – AthibaN

+0

當您應用上述解決方案時,將出現以下問題: http://stackoverflow.com/questions/26279779/validation-of-datetimepicker-is-not-working-properly –

回答

9

在jQuery.validate.js到follwing更改日期驗證方法解決這個問題:

date: function (value, element) { 
     $.culture = Globalize.culture("en-GB"); 
     var date = Globalize.parseDate(value, "dd/MM/yyyy", "en-GB"); 
     return this.optional(element) || 
         !/Invalid|NaN/.test(new Date(date).toString()); 
    } 

在Chrome,FF和IE

在jQuery的
+0

在哪裏添加它? – Chlebta

+0

在您的解決方案中的jQuery.validate.js文件 –

+0

我是否需要添加'Globalize.js',因爲我用這個替換了舊的'date:function ...'但它不起作用始終我得到'提交...必須是日期' – Chlebta

0

剛走不得不想出解決辦法,我推翻了統治和使用的數據屬性

if (typeof jQuery.validator.methods.date !== 'function') { 
    var f = function (value, element) { 
     var e = $(element).attr('data-dateformat'); 
     if (e && (e.length)) { 
      var dt = jQuery.datepicker.parseDate(e, value); 
      return this.optional(element) || !/Invalid|NaN/.test(dt.toString()); 
     } else { 
      return this.optional(element) || !/Invalid|NaN/.test(new Date(value).toString()); 
     } 
    } 
    jQuery.validator.addMethod("date", f); 
} else { 
    var m = jQuery.validator.methods.date; 
    var f = function(value, element) { 
     var e = $(element).attr('data-dateformat'); 
     if (e && (e.length)) { 
      var dt = jQuery.datepicker.parseDate(e, value); 
      return this.optional(element) || !/Invalid|NaN/.test(dt.toString()); 
     } else { 
      return m(value, element); 
     } 
    } 
    jQuery.validator.addMethod("date", f); 
} 

它假定你有日期選擇器,但如果您使用的日期,和jQuery,我認爲這是一個安全的賭注。 如果元素具有data-dateformat中定義的日期格式,它將使用該格式解析它,否則它將回退到默認日期規則,如果沒有,則實現默認規則。

我把這個在我的地盤全局代碼文件,以保持它的jQuery的腳本外