J'ai eu un problème comme vous, mais pas tout à fait la même, j'avais quelque chose comme ceci:
<asp:RangeValidator ID="rw" ErrorMessage="error"
Text="!" ControlToValidate="r" MinimumValue="1 000,00" MaximumValue="1 000 000,00" Type="Currency" CultureInvariantValues="false" runat="server" EnableClientScript="true" />;
Je DataBound mes contrôles avec des données par exemple 2 et j'avais 000,00 erreur de validation
mais quand je suis entré dans une valeur de 2 000 od , 00 tout allait bien.
la réponse était l'espace dans CurrencyGroupSeparator, ma culture pl-pl a espace, mais il est pas d'espace « \ X0020 », mais il est un espace insécable « \ 00A0 »
Je l'ai utilisé réflecteur faire quelques recherches et ce que je trouve laisse perplexe
chèque format monétaire est en classe BaseCompareValidator dans la méthode chaîne statique privée ConvertCurrency (texte chaîne, informations NumberFormatInfo)
et dans le code il y a une ligne comme celui-ci:
if (currencyGroupSeparator[0] == '\x00a0')
{
currencyGroupSeparator = " ";
}
J'ai mis du code décompilé dans un projet de test et j'ai essayé de l'exécuter, et en effet le code ne fonctionnait pas correctement.
ConvertCurrency (10000000.00m.ToString ("n"), NumberFormatInfo.CurrentInfo) a renvoyé la valeur null;
pourquoi quelqu'un l'a mis là je ne sais pas, mais alors je l'ai commenté, la méthode ont commencé à fonctionner correctement.
nous ne pouvons pas compiler NET Framework à partir des sources encore, donc ce que nous pouvons faire, est de changer séparateur d'espace insécable à l'espace
donc la solution à notre problème est:
fil. CurrentThread.CurrentCulture = nouveau CultureInfo ("some culture name"); Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyGroupSeparator = "\ x0020"; Thread.CurrentThread.CurrentCulture.NumberFormat.NumberGroupSeparator = "\ x0020";