我在SQL,C#,Razor和HTML5中使用dataformatting时出现问题
在我的数据库中是一个必须代表货币的字段,但是数据类型是十进制(18,2),保存到数据库的每个值都以小数点保存。
在我的DTO中,类型也是十进制的。
但是当我给EditorFor类型编号时,该字段在加载页面时为null。 当我给编辑器输入类型钱时,该字段用正确的值填充,但是它放置一个逗号而不是小数点,这使得它在表单提交时会出现验证错误。我必须手动将逗号更改为小数点才能正确提交。
我已经尝试将EditorFor的类型设置为数字并设置step属性但是它仍然保持我的输入为空。
这是数据库中的记录
这是我视图中的记录
这是生成的html标记
更新: 我将全球化设置更改为en-US,这将逗号修改为小数点问题,但是将日期注释搞砸了,所以我希望数据注释为nl-NL(或类似)和数字格式为en-US(或类似)
注意:不允许对数据库进行有关数据类型的任何更改。
注意:调试是在Google Chrome和Microsoft Edge上完成的
答案 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"
/>