我的网站有一个带有数字输入的表单,带有十进制数字。这将在视图模型中发送回控制器。验证通过后,视图模型将转换为如下实体:
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是,为什么浏览器在数字字段中显示逗号但是用点发回?
答案 0 :(得分:0)
这听起来不正确。您应该仔细检查分配中的类型及其值(例如,在调试器中)。在.NET运行时中将小数分配给另一个小数将改变该值是没有意义的。