У меня была такая же проблема, как и у вас, но не совсем, у меня было что-то вроде этого:
<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" />;
Я связал свои элементы управления с данными, например, 2 000,00, и у меня была ошибка проверки
но когда я ввел значение od 2 000,00, все было в порядке.
ответом был пробел в CurrencyGroupSeparator, в моей культуре pl-pl есть пробел, но это не пробел "\ x0020"но это не пробел" \ 00A0 "
Я использовал отражатель, чтобы покопаться, и обнаружил, что озадачивает
проверка формата валюты в классе BaseCompareValidator в закрытой статической строке методаConvertCurrency (текст строки, информация NumberFormatInfo)
и в коде есть строка, подобная этой:
if (currencyGroupSeparator[0] == '\x00a0')
{
currencyGroupSeparator = " ";
}
Я вставил декомпилированный код в тестовый проект и попытался запустить его, и действительно, код былне работает должным образом.
ConvertCurrency (10000000.00m.ToString ("n"), NumberFormatInfo.CurrentInfo) возвратил ноль;
почему кто-то положил его туда, я не знаю, но потом я прокомментировалэто ямы начали работать правильно.
мы еще не можем скомпилировать .net framework из исходного кода, поэтому мы можем изменить разделитель с неразрывного пробела на пробел
, чтобы решить нашу проблемуis:
Thread.CurrentThread.CurrentCulture = new CultureInfo ("некоторое название культуры"); Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyGroupSeparator = "\ x0020";Thread.CurrentThread.CurrentCulture.NumberFormat.NumberGroupSeparator = "\ x0020";