2012-09-07 86 views
0

我的Asp.Net MVC有一個小問題。Asp.Net MVC:雙重客戶端數據驗證,本地化

現在我已經開發了一個英文網站,一切工作正常,我所有的文本已經在本地化,我已經有一個基於會話的系統。當我使用另一種語言(在我的法語中)時,它將Thread.CurrentThread.CurrentUICultureThread.CurrentThread.CurrentCulture更改爲從「fr」創建的文化信息。

我的所有traductions正在工作,但我有一種形式的問題。

在法國,小數部分與整數部分用「,」分開。服務器驗證正常工作,並翻譯「234,512」(並知道變換「234.512」太)成雙。

但是客戶端驗證不接受這一點,它說:

"Le champ XYZ doit être un nombre." 

因此它具有正確的地方(因爲消息是法語翻譯),但它似乎想在編輯的數字「 235,55" 。

在開始時我認爲這不是什麼大不了的事,用戶可以用「234.512」格式輸入數字,但是問題出在數據版本上,因爲線程是法語的,它會用「 234,512「,而不是」234.512「,並且因爲該客戶必須在每次更改時更改分隔符(事件如果他們沒有在該字段上進行更改),否則他們將得到一個客戶端驗證錯誤(當沒有呼叫時我按下提交按鈕,我檢查了幾次)。

那麼我該怎麼做才能讓客戶端驗證腳本在當前語言環境中雙重工作?

非常感謝!

回答

1

這是衆所周知的問題。 jQuery中的Javascript驗證器不允許除點之外的任何內容。 最簡單的方法是在cshtml中更改jquery.validate.min.js(或如此)或重寫自定義驗證程序。裏面的jquery它將是:

// http://docs.jquery.com/Plugins/Validation/Methods/number 
number: function(value, element) { 
    //return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value); <-- original 
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:[\.,]\d+)?$/.test(value); 
}, 
+0

謝謝您的回答,但Raphael的解決方案是正確的 – J4N