2014-03-18 35 views
2

在我的MVC應用程序,我做了這個簡單的測試功能...需要能夠丹麥小數傳遞到MVC控制器

Function test(d As Decimal) As JsonResult 
    Return Json(d) 
End Function 

發送... /?d = 1900工作正常。

正在發送... /?d = 1,900失敗,「d」爲空。

發送... /?d = 1.900轉化d,以1.9D < ---我需要這個ONE

由於我丹麥,我希望能夠傳遞到1.900 「d」,因此它將是一千九百。

我試着在web.config中設置這個... ......沒有幫助。

有什麼想法?

+1

查詢字符串不必旨在是人類可讀的;?它是否真的非常重要,它遵循丹麥的語言環境? (即,*必須*它包含'.'?簡單的'1900'有什麼問題嗎?)我確信這是可能的(但我不知道解決方案,因爲我沒有做web/ASP工作) ,我只是好奇而已。 – TypeIA

+0

您提到'... /?d = 1,900失敗,「d」爲空,但是如何可能像Decimal這樣的值類型爲null?這與.NET中值類型的含義的基本定義相矛盾。 –

+0

在客戶端上將'1.900'轉換爲'1900',或將參數更改爲字符串並在控制器方法內轉換爲小數。 – EkoostikMartin

回答

0

你需要做的是做一個文化特定的轉換爲十進制。如果你沒有指定文化,ASP.NET MVC將使用不變文化。同樣,如果您使用decimal.Parse函數而沒有文化將使用系統的當前文化。

你需要做的是使用函數Decimal.Parse與你提供的文化。 see here

您可以以任何用戶/會話類型的設置來設置每個用戶的文化,也可以將其作爲參數傳遞。 E.g:

/d = 1900 &培養= DA-DK

然後,你可能傳遞

decimal.Parse(d, System.Globalization.CultureInfo.GetCultureInfo(culture)) 
+3

這是一個錯誤的答案。 ASP.NET MVC **總是在解析查詢字符串參數時使用InvariantCulture。它不承擔任何事情,也不使用任何系統文化。在解析POST正文有效內容中的值時,它使用系統區域性。以下博客文章將爲您提供有關此設計決策的更多詳細信息http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx –

+0

這正是我爲什麼這麼做的原因建議他自己解析參數,如果他絕對必須通過丹麥數字格式的參數。 –

+0

然後請修復你的答案的第一段,因爲它是絕對錯誤的**:如果你沒有指定文化,系統將使用系統當前的文化,這可能是一種英文形式。 。正確的答案是,ASP.NET MVC將**總是在解析查詢字符串參數時使用InvariantCulture。 –