【问题标题】:Forcing decimal point instead of comma强制使用小数点而不是逗号
【发布时间】:2016-06-18 01:29:14
【问题描述】:

我在 SQL、C#、Razor 和 HTML5 中遇到数据格式化问题

在我的数据库中是一个必须代表货币的字段,但是数据类型是小数(18,2),保存到数据库的每个值都保存有小数点。

在我的 DTO 中,类型也是十进制的。

但是,当我给 EditorFor 类型编号时,该字段在加载页面时为空。 当我给 EditorFor 类型 money 时,该字段填充了正确的值,但是它放置了一个逗号而不是小数点,这让它在表单提交时引发验证错误。我必须手动将逗号更改为小数点才能正确提交。

我已经尝试将 EditorFor 的类型设置为 number 并设置 step 属性,但它仍然使我的输入为空。


这是数据库中的记录




这是我认为的记录




这是生成的 html 标记

更新: 我将全球化设置更改为 en-US,这修复了逗号到小数点的问题,但搞砸了我的日期注释,所以我希望数据注释为 nl-NL(或类似)并且数字格式为是美国(或类似)



注意:不允许对数据库的数据类型进行任何更改。
注意:在 Google Chrome 和 Microsoft Edge 上进行调试

【问题讨论】:

  • 该字段的模型中的数据类型是什么?
  • 它的数据类型是十进制的?因为它可以为空
  • 听起来你应该看看全球化设置——不过我不知道它们是否可以单独控制。
  • 全球化设置对我来说是新的,我会看看。
  • 我在 2 个月前遇到了同样的问题,但我没有找到令人满意的解决方案,但我懒得浏览这个重要的信息来源:johnnyreilly.github.io/jQuery.Validation.Unobtrusive.Native/…

标签: c# sql-server html razor asp.net-mvc-5


【解决方案1】:

如果在您的模型或 ViewModel 中,您可以将其与数据注释一起使用:

[DisplayFormat(DataFormatString = "{0:$###,###}")]

如果在你的控制器中你可以使用:

string.Format("{0:$###,###}", yourContext.yourDataFieldname);

【讨论】:

    【解决方案2】:

    格式化和解析等内容是文化敏感的。

    对于服务器,即 ASP.NET,这是当前线程/执行上下文的文化。

    对于客户端/浏览器,它会根据浏览器配置和/或操作系统/区域设置设置 Accept-Language 标头。您可以通过在某处存储覆盖(会话状态、cookie、查询字符串?ln=en-us、路由`http://localhost/nl-nl/home/index,...)来允许人们单击标志来更改语言。

    最好先尊重Accept-Language,然后如果需要,允许通过其他方法之一的用户操作覆盖暗示的文化。

    本质上,在服务器上,您需要设置当前执行上下文的文化和/或 UI 文化(不一定像线程一样粗糙,因为存在 async/await 并且多个请求可能同时服务线程,但这将通过执行上下文的概念自动为您处理)

    见

    可能需要或不需要的最后一件事——我不太清楚——可能是在需要时向页面上的验证属性添加一些内容。但您可能会很幸运,发现 MVC 会自动执行此操作。

    请注意,您可以/必须更改 Windows 区域设置以让 IE/Edge 发送不同的语言列表。 请注意,该列表实际上可能包含一个语言列表,您可能需要将这些语言与您的应用程序中的资源语言进行匹配(如果适用),如果说客户要求中文、荷兰语和美国语,可能会选择提到的第一个语言之外的其他语言英语(按此顺序),如果在这种情况下您想使用荷兰语语言环境而不是文化中性/不变文化/按照惯例美国英语提供服务。

    【讨论】:

      【解决方案3】:

      尝试将其放入您的 asp.net web.config 文件中:

      <globalization
          culture="en-US"
          uiCulture="en-US"
      /> 
      

      【讨论】:

      • 谢谢!然而,这确实解决了我的逗号到十进制问题,它搞砸了我的日期注释。
      • 这是一个有效的答案吗?现在您必须进行其他黑客攻击来更正货币符号并更正日期格式
      猜你喜欢
      • 2021-06-28
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多