为什么Html.DisplayFor和.ToString(“C2”)不尊重CurrentUICulture?

时间:2010-11-13 09:39:31

标签: asp.net asp.net-mvc globalization azure-storage

在我的ASP.MVC 2.0网站上,我在web.config中有以下设置:

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

当我尝试使用Html.DisplayFor()或ToString(“C2”)在视图中显示金额时,我希望得到“kr.3.500,00”(uiCulture)而不是“$ 3,500.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 Table存储时会丢失所有小数点! #BUG

1 个答案:

答案 0 :(得分:3)

UI文化用于查找和加载资源,文化用于格式化。

因此,不采用文化的各种ToString(string)String.Format重载将使用该主题的当前文化(System.Globalization.CultureInfo.CurrentCulture)进行格式化。

如果您想将丹麦格式用于货币,日期,...,则Thread.CurerentThread.CurrentCulture需要设置为CultureInfo.GetCultureInfo("da-DK")(直接或间接)。

总结:您的文化和UI文化是错误的。