ASP.NET MVC: форсирование информации о культуре в веб-приложении - PullRequest
2 голосов
/ 19 января 2012

Я работаю над веб-приложением, имеющим некоторый код ASP.NET, который генерирует некоторые значения в javascript для Views.

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.

Я изменил настройки на компьютере, чтобы использовать настройки локали США, но ничего не изменилось на выходе (яперестроил решение и даже перезагрузил компьютер, но безрезультатно).

Мне было интересно, как лучше установить параметры локали в веб-приложении, чтобы оно всегда создавало точку в качестве десятичного разделителя.

Спасибо!Будет

Ответы [ 2 ]

3 голосов
/ 19 января 2012

Полагаю, что широта - это десятичное или двойное значение, верно? Попробуйте это

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 голосов
/ 19 января 2012
var userLocation = { 
  lat: @Model.Location.Latitude.ToString(CultureInfo.InvariantCulture), 
  lng: @Model.Location.Longitude.ToString(CultureInfo.InvariantCulture)
}; 

Либо, если вы не хотите изменять свои представления, добавьте эту строку в свой контроллер:

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

Обратите внимание, что это может вызвать побочные эффекты, такие как форматирование даты.

И если вы вообще не хотите вносить никаких изменений в код, следуйте советам Фабио по поводу web.config. Но, делая это, вы не оказываете услугу своим пользователям, поскольку: опять же, форматирование даты и др.

...