aspnet core / ef核心实体中的十进制问题

时间:2017-09-04 09:11:16

标签: c# entity-framework-core asp.net-core-mvc-2.0

我的网站有一个带有数字输入的表单,带有十进制数字。这将在视图模型中发送回控制器。验证通过后,视图模型将转换为如下实体:

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是,为什么浏览器在数字字段中显示逗号但是用点发回?

1 个答案:

答案 0 :(得分:0)

这听起来不正确。您应该仔细检查分配中的类型及其值(例如,在调试器中)。在.NET运行时中将小数分配给另一个小数将改变该值是没有意义的。