Я пытаюсь понять, почему framework отказывается привязывать значение «1,234.00» к десятичной. Что может быть причиной этого?ASP.NET MVC обязательное десятичное значение
Значения типа «123.00» или «123.0000» успешно связываются.
У меня есть настройки моей культуры конфигурации в Global.asax следующего кода
public void Application_AcquireRequestState(object sender, EventArgs e)
{
var culture = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
culture.NumberFormat.NumberDecimalSeparator = culture.NumberFormat.CurrencyDecimalSeparator = culture.NumberFormat.PercentDecimalSeparator = ".";
culture.NumberFormat.NumberGroupSeparator = culture.NumberFormat.CurrencyGroupSeparator = culture.NumberFormat.PercentGroupSeparator = ",";
Thread.CurrentThread.CurrentCulture = culture;
}
Французская культура устанавливаются как культура по умолчанию в Web.Config
<globalization uiCulture="fr-FR" culture="fr-FR" />
Я нырнул источники системы .Web.Mvc.dll класс ValueProviderResult. Он использует System.ComponentModel.DecimalConverter.
converter.ConvertFrom((ITypeDescriptorContext) null, culture, value)
Здесь сообщение «1,234.0000 является недопустимым значением для десятичного числа». происходит от.
Я попытался запустить следующий код в моей игровой площадке:
static void Main()
{
var decConverter = TypeDescriptor.GetConverter(typeof(decimal));
var culture = new CultureInfo("fr-FR");
culture.NumberFormat.NumberDecimalSeparator = culture.NumberFormat.CurrencyDecimalSeparator = culture.NumberFormat.PercentDecimalSeparator = ".";
culture.NumberFormat.NumberGroupSeparator = culture.NumberFormat.CurrencyGroupSeparator = culture.NumberFormat.PercentGroupSeparator = ",";
Thread.CurrentThread.CurrentCulture = culture;
var d1 = Decimal.Parse("1,232.000");
Console.Write("{0}", d1); // prints 1234.000
var d2 = decConverter.ConvertFrom((ITypeDescriptorContext)null, culture, "1,232.000"); // throws "1,234.0000 is not a valid value for Decimal."
Console.Write("{0}", d2);
}
DecimalConverter кидает то же исключение. Decimal.Parse правильно разбирает одну и ту же строку.
очень впечатляет – Johnv2020
Почему вы использовали Double.Parse, а не Decimal.Parse? –
@IvanGritsenko: Просто опечатка;) – Carsten