2011-11-29 71 views
1

我按照手動升級的說明將mvc 3 web應用程序升級到mvc 4。一切正常,並且該應用程序在IE9中運行。我有幾種數據類型的字段,包括客戶端和服務器端驗證,並且在提交表單時都正確處理。MVC 4:Firefox,Chrome,Safari中的日期驗證錯誤 - IE ok

但是,當我使用其他瀏覽器 - 測試Firefox 8,Chrome 15和Safari 5.1.1 - 它驗證日期字段時失敗。我正在使用格式爲dd-MM-yyyy的'pt-PT'文化,正如我所說的,在IE9中他們通過了驗證,但在其他瀏覽器上則表示該字段不是有效日期。

TIA

若阿金·

回答

8

我發現這個問題是jQuery驗證。它調用JavaScript日期構造函數來檢查日期是否有效:

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

由於JavaScript的日期構造期待形式的日期YYYY-MM-DD它在葡萄牙語格式DD-MM-YYY日期返回無效。

IE是一個例外,它不返回無效,但與我們引入的日期不同。

的soluction是創建一個jquery.validate-pt.js的代碼與正確的爲我們的格式來覆蓋驗證:

$.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]))); 
} 
+2

我想這也可能是有益的 - HTTP:// geekswithblogs.net/EltonStoneman/archive/2009/10/29/jquery-date-validation-in-chrome.aspx –

+0

嗨Joaquim,感謝您發佈您的解決方案。你能否告訴你需要放置重寫代碼的位置以及如何確保它確實覆蓋驗證? – mattpm