2012-01-19 3 views
2

Я работаю над веб-приложением, которое имеет некоторый код ASP.NET, который генерирует некоторые значения в javascript в представлениях.ASP.NET MVC: форсирование информации о культуре в веб-приложении

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.

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

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

Спасибо! Will

ответ

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

Таким образом, все переменные @variable вне javascript будут отображаться неправильно, если вы измените формат отображения Int32 во всем приложении. Это то, что вы хотите? –

+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

Смежные вопросы