强制小数点而不是逗号

时间:2016-03-04 10:40:27

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

我在SQL,C#,Razor和HTML5中使用dataformatting时出现问题

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

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

但是当我给EditorFor类型编号时,该字段在加载页面时为null。 当我给编辑器输入类型钱时,该字段用正确的值填充,但是它放置一个逗号而不是小数点,这使得它在表单提交时会出现验证错误。我必须手动将逗号更改为小数点才能正确提交。

我已经尝试将EditorFor的类型设置为数字并设置step属性但是它仍然保持我的输入为空。

record in database
这是数据库中的记录



record on page
这是我视图中的记录



html markup
这是生成的html标记

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



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

3 个答案:

答案 0 :(得分:1)

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

  

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

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

  

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

答案 1 :(得分:0)

格式化和解析之类的东西都是文化敏感的。

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

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

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

本质上,在服务器上,您需要设置当前执行上下文的文化和/或UI文化(不一定像线程一样粗略,因为有async / await,并且多个请求可能同时发送线程,但会自动为您执行执行上下文的概念。

可能需要与否的最后一件事 - 我不太了解 - 如果需要,也许可以在页面上的验证属性中添加一些东西。但你可能会很幸运,并发现MVC会自动执行此操作。

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

答案 2 :(得分:-1)

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

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