Próbuję ustalić, dlaczego struktura nie chce powiązać wartości "1,234.00" z wartością dziesiętną. Jaki może być tego powód?Wartość dziesiętna wiązania MVC programu ASP.NET:
Wartości takie jak "123.00" lub "123.0000" wiążą się pomyślnie.
Mam następujący kod ustawienia moja kultura config w 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;
}
francuska kultura jest ustawiony jako domyślny kultury w web.config
<globalization uiCulture="fr-FR" culture="fr-FR" />
ja zanurkował źródeł Systemu Klasa ValueProviderResult .Web.Mvc.dll. Używa System.ComponentModel.DecimalConverter.
converter.ConvertFrom((ITypeDescriptorContext) null, culture, value)
Tutaj pojawia się komunikat "1,234.0000 nie jest prawidłową wartością dziesiętną." pochodzi z.
Próbowałem uruchomić następujący kod w moim zabaw:
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 rzuca sam wyjątek. Decimal.Parse poprawnie analizuje ten sam ciąg.
bardzo efektownie – Johnv2020
Dlaczego używałeś Double.Parse, a nie Decimal.Parse? –
@IvanGritsenko: Tylko literówka;) – Carsten