我的网站有一个带有十进制数字的数字输入表单。这通过视图模型发送回控制器。当验证通过时,视图模型被转换为像这样的实体:aspnet核心/ ef核心实体的小数烦恼
quotation.WidthMeters = model.WidthMeters.
因此,这里是有趣的开始。
我的网站是在荷兰文化。我们使用逗号作为小数分隔符。所以用户在表格中输入2,40。这被送回。我可以看到viewmodel中的数据包含2.40这是美国的说法2,40。现在当这个值被分配给实体时,它突然改变为240.因此quotation.WidthMeters
现在是240,但分配它的属性(model.WithMeters
)是2.40。
为什么?
(可能是重要的补充:我做了我的控制器运行在InvariantCulture的加入下面的两行到控制器的构造函数:
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
实体是在同一个项目)
更新
当我添加下面我startup.cs
,它的工作原理:
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en-US"),
SupportedCultures = new [] {new CultureInfo("en-US") },
SupportedUICultures = new [] { new CultureInfo("en-US") }
});
当我将文化改为nl-NL时,它不起作用,但我更喜欢使用荷兰文化,因为那样也会修复日期。
更新2
在我的表单中我使用了<input type="number" />
场至少在Chrome和Firefox总是带小数点送多少回。 我切换回文本字段并将文化更改为nl-NL。现在我可以输入带有十进制逗号的数字,并由服务器正确处理。
所以TRWTF是为什么一个浏览器在数字字段中显示一个逗号,但用点回送一个逗号?
所以你告诉我们,将小数点分配给另一个小数点会将数值从2.40更改为240? – user743414
@ user743414请参阅我的编辑 – jao
您是否安装了https://www.nuget.org/packages/Microsoft.AspNetCore.Localization/? – haim770