【问题标题】:Decimal troubles in aspnet core / ef core entityaspnet core / ef core 实体中的小数问题
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 这与 .NET 更改类型无关。这是关于国际化的 - 浏览器使用 与服务器不同的 文化。 ASP.NET 已经处理了这个问题,除非有人硬编码了错误的文化,或者只是使用了错误的文化。就像机器区域设置为 en-US 的开发人员试图输入本地化字符串一样。
猜你喜欢
  • 1970-01-01
  • 2018-02-03
  • 2022-12-09
  • 2021-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 2019-02-23
相关资源
最近更新 更多