Tôi đang cố gắng tìm ra lý do tại sao khuôn khổ từ chối liên kết giá trị "1,234.00" với số thập phân. Điều gì có thể là lý do cho nó?Giá trị thập phân ràng buộc ASP.NET MVC
Giá trị như "123.00" hoặc "123.0000" liên kết thành công.
tôi có các thiết lập cấu hình văn hóa của tôi trong Global.asax mã sau
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;
}
văn hóa Pháp được thiết lập như văn hóa mặc định trong Web.Config
<globalization uiCulture="fr-FR" culture="fr-FR" />
Tôi đã lặn vào nguồn của hệ thống Lớp ValueProviderResult của .Web.Mvc.dll. Nó đang sử dụng System.ComponentModel.DecimalConverter.
converter.ConvertFrom((ITypeDescriptorContext) null, culture, value)
Đây là nơi thông báo "1,234.0000 không phải là giá trị hợp lệ cho thập phân". đến từ.
Tôi đã cố gắng để chạy đoạn mã sau vào sân chơi của tôi:
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 ném cùng một ngoại lệ. Decimal.Parse phân tích chính xác cùng một chuỗi.
rất ấn tượng – Johnv2020
Tại sao bạn sử dụng Double.Parse và không Decimal.Parse? –
@IvanGritsenko: Chỉ cần một lỗi đánh máy;) – Carsten