Почему Html.DisplayFor и .ToString ("C2") не уважают CurrentUICulture? - PullRequest
2 голосов
/ 13 ноября 2010

На моем веб-сайте ASP.MVC 2.0 у меня есть следующий параметр в web.config:

<globalization uiCulture="da-DK" culture="en-US" />

Когда я пытаюсь отобразить сумму в представлении с использованием Html.DisplayFor () или ToString ("C2"), я ожидал получить "3,500,00 кр" (uiCulture), а не "3500,00 долларов" (культура).

<%:Html.DisplayFor(posting => posting.Amount)%>
<%:Model.Amount.ToString("C2")%>

Если я явно использую информацию CurrentUICulture, она работает как положено, но я не хочу делать это каждый раз, когда мне нужно отобразить число, дату или десятичное число. И еще мне нравится использовать DisplayFor, который не поддерживает параметр IFormatProvider.

<%:Model.Amount.ToString("C2", System.Globalization.CultureInfo.CurrentUICulture)%>

Как я могу изменить форматирование, не меняя культуру системы?

Это выполняется в Azure, и если я изменю язык на «da-DK», все десятичные точки будут потеряны при сохранении в хранилище таблиц Azure! # BUG

1 Ответ

3 голосов
/ 13 ноября 2010

Культура пользовательского интерфейса используется для поиска и загрузки ресурсов, культура используется для форматирования.

Так что различные перегрузки ToString(string) и String.Format, которые не принимают культуру, будут использовать текущий потокКультура (System.Globalization.CultureInfo.CurrentCulture) для форматирования.

Если вы хотите использовать датское форматирование для валюты, дат, ..., тогда Thread.CurerentThread.CurrentCulture необходимо установить на CultureInfo.GetCultureInfo("da-DK") (прямо или косвенно).

Краткое описание: у вас Культура и пользовательский интерфейс Культура неправильно.

...