【发布时间】:2017-09-04 09:11:16
【问题描述】:
我的网站有一个带有十进制数字输入的表单。这被发送回视图模型中的控制器。验证通过后,视图模型将转换为如下实体:
quotation.WidthMeters = model.WidthMeters.
这就是乐趣的开始。
我的网站属于荷兰文化。我们使用逗号作为小数分隔符。所以用户在表单中输入 2,40。这是发回的。我可以看到视图模型中的数据包含 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 查看我的编辑
-
你能创建一个最小的工作示例来重现这个问题吗?
-
我正在使用包含 AspnetCore.Localization 的 Microsoft.AspnetCore.All 但我没有配置任何东西
标签: c# entity-framework-core asp.net-core-mvc-2.0