2012-01-19 58 views
2

我正在研究一個Web應用程序,該Web應用程序具有一些ASP.NET代碼,可在視圖上的JavaScript中生成一些值。ASP.NET MVC:在Web應用程序中強制使用文化信息

var userLocation = { lat: @Model.Location.Latitude, lng: @Model.Location.Longitude }; 

此作品在我的電腦上就好了,它產生這樣的:

var userLocation = { lat: 9.9333333, lng: -84.0833333 }; 

的問題是,我是有區域設置設置爲西班牙語另一臺計算機上設置開發環境,在這種情況下,生成的JavaScript看起來像這樣(請注意逗號作爲小數點分隔符):

var userLocation = { lat: 9,9333333, lng: -84,0833333 }; 

,這將清楚地顯示在JavaScript錯誤。

我在電腦改變了設置,使用美國區域設置,但它沒有對輸出進行任何更改(我重建解決方案,甚至重新啓動計算機,但沒有效果)。

我想知道什麼是設置在Web應用程序的語言環境設置,以便它總是產生點作爲小數點分隔符的最佳途徑。

謝謝! 將

回答

3

我想,緯度是小數或雙精度值,對不對?試試這個

CultureInfo usa = new CultureInfo("en-US"); 

var userLocation = { lat: @Model.Location.Latitude.ToString(usa), lng: @Model.Location.Longitude.ToString(usa) }; 

你需要爲你的變量定義一個特定的CultureInfo。所以不管當前的文化如何,它總是會在指定的CultureInfo中。

如果你想改變整個應用程序的文化,你需要設置在web.config全球化>的System.Web

<globalization uiCulture="en" culture="en-US" /> 
+0

對,我知道這是行得通的,但這意味着無論我在何處打印十進制值,都會更改應用程序的每個視圖。我需要一種方法來完成整個應用程序。 – willvv

+0

因此,如果您在整個應用程序中更改Int32顯示的格式,那麼javascript之外的所有@variable將顯示不正確。那是你要的嗎? –

+0

的確,我不知道web.config中的選項。謝謝 @DMoses你是什麼意思不正確?這個想法是,我總是知道一個數字將被顯示的確切方式,並在javascript中處理它。 – willvv

0
var userLocation = { 
    lat: @Model.Location.Latitude.ToString(CultureInfo.InvariantCulture), 
    lng: @Model.Location.Longitude.ToString(CultureInfo.InvariantCulture) 
}; 

另外,如果你不想修改你的觀點,在你的控制器中加入這一行:

System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; 

注意,這可能會引起副作用,如日期格式。

如果你不想改變任何代碼中的所有,跟蹤Fabio的約web.config中的建議。但是通過這樣做,你不會爲你的用戶提供幫助,因爲:同樣,日期格式化等。

+0

我得到你說的,但我的想法是,如果我總是知道日期/數字的格式,所以我可以根據用戶的區域設置使用JavaScript正確格式化它們。 – willvv

相關問題