ASP.NET MVC:在Web应用程序上强制文化信息

时间:2012-01-19 16:16:51

标签: javascript asp.net-mvc cultureinfo

我正在开发一个Web应用程序,它有一些ASP.NET代码,可以在视图上的javascript中生成一些值。

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应用程序中设置区域设置的最佳方法是什么,所以它总是生成点作为小数点分隔符。

谢谢! 将

2 个答案:

答案 0 :(得分:3)

我认为Latitude是小数或双精度值,对吧?试试这个

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" />

答案 1 :(得分: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的建议。但是,通过这样做,你没有给用户一个帮助,因为:再次,日期格式化等。