2010-11-13 3 views
2

Dans mon site ASP.MVC 2.0 Je le paramètre suivant dans web.config:Pourquoi Html.DisplayFor et .ToString ("C2") ne respectent pas CurrentUICulture?

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

Lorsque je tente d'afficher une quantité dans une vue à l'aide Html.DisplayFor() ou ToString ("C2") I s'attend à recevoir "kr. 3.500,00" (uiCulture) et non "$ 3.500.00" (culture).

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

Si je explicite utilise CurrentUICulture informations qu'il fonctionne comme prévu, mais je ne veux pas faire cela chaque fois que je dois afficher un numéro, la date ou décimal. Et j'aime aussi utiliser DisplayFor, qui ne supporte pas le paramètre IFormatProvider.

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

Comment puis-je modifier la mise en forme sans modifier la culture du système?

Cela fonctionne dans Azure, et si je change la culture en "da-DK" tous les points décimaux sont perdus, lors de l'enregistrement au stockage Azure Table! #BUG

Répondre

3

La culture d'interface utilisateur est utilisée pour rechercher et charger des ressources, la culture est utilisée pour le formatage. Par conséquent, les surcharges ToString(string) et String.Format qui ne prennent pas de culture utiliseront la culture actuelle du thread (System.Globalization.CultureInfo.CurrentCulture) pour formater.

Si vous souhaitez utiliser le formatage danois pour la devise, les dates, ..., Thread.CurerentThread.CurrentCulture doit être défini sur CultureInfo.GetCultureInfo("da-DK") (directement ou indirectement). Résumé: vous avez la culture et la culture de l'interface utilisateur à l'envers.

+0

Merci ... il s'est avéré que ma confusion est liée à un "gros" bogue dans Azure Developer Fabric. Si les paramètres régionaux utilisent une virgule comme point décimal 1000,95 sera enregistré en tant que 100095. Se: http://social.msdn.microsoft.com/Forums/en-US/windowsazuretroubleshooting/thread/f327944c-e18a-490a-aa25- 306f3c6a17de –

+0

@Thomas: si vous stockez en interne ou si vous transférez vers un autre système (c'est-à-dire pas pour un utilisateur), utilisez toujours une culture invariante ou une autre norme indépendante des paramètres régionaux. – Richard

Questions connexes