2010-12-03 67 views
2

我的應用程序在ro-RO文化設置下運行,在web.config全球化部分配置。如果我做出這樣DateTime和ASP.NET MVC 3 Model Binding的全球化問題

POST /myapp/index 
date=03-12-2010&value=something 

模型綁定映射此更正「2010年12月03」的日期值,因爲對RO-RO文化的默認datetime格式的POST請求是DD-MM-YYYY。如果我改變請求方法來獲取傳入我的行動的日期值變爲相同的數據「2010年3月12日」(MM-DD-YYYY日期時間格式)

GET /myapp/index?date=03-12-2010&value=something 

$.getJSON('/Home/Index', $('form').serialize(), function(d) { 
      // ... 
}); 
$.post('/Home/Index', $('form').serialize(), function(d) { 
      // ... 
}, 'json'); 

因此,在這種情況下「的getJSON」 &「後「必須返回相同的結果,但由於日期差異,我得到了不同的結果。

如何爲GET請求啓用相同的解析格式?

我知道我可以使用更通用的格式,如日期爲yyyy-MM-dd,但我只是好奇爲什麼會發生這種情況?

回答

13

我以前對這個問題的回答:Nullable DateTime Parameter is never bound when calling the action

這是故意凡是是URI的一部分(注意URI的‘統一’)被解釋爲好像它是從固定區域性未來。這樣一來,美國的用戶通過複製鏈接並通過即時消息將其發送給英國的朋友可以確信他的朋友將看到完全相同的頁面(與由於DateTime轉換錯誤導致的HTTP 500相反) ,例如)通常,在RouteData或QueryString中傳遞的日期應該採用yyyy-mm-dd的格式,以便在不同的文化中是明確的

如果您需要以可識別文化的方式解釋QueryString或RouteData參數,請將其作爲字符串拉入,然後將其手動轉換爲所需的類型,並傳遞所需的文化。 (DateTime.Parse具有允許指定區域性的重載)。如果你這樣做了,我推薦也將期望的區域性作爲QueryString或RouteData參數,以便URI的'Uniform'部分不會丟失,例如。網址看起來像......?culture = fr-fr & date = 01-10-1990。