MVC中的十进制符号问题,C#?
我正在使用MVC5.0MVC中的十进制符号问题,C#?,c#,asp.net-mvc,asp.net-mvc-5,culture,C#,Asp.net Mvc,Asp.net Mvc 5,Culture,我正在使用MVC5.0 我在配置中设置了区域性: <system.web> <globalization uiCulture="fa-IR" culture="fa-IR" /> </system.web> MVC在视图中显示nbatpercent值,如22/5,当我想提交表单时,表单验证程序会提醒我字段nbatpercent必须是一个数字。。它无法将22/5转换为22.5 如果输入22.5就可以了,但是如果属性有值,它会将转换为/ 如何将所有数值属性
我在配置中设置了区域性:
<system.web>
<globalization uiCulture="fa-IR" culture="fa-IR" />
</system.web>
MVC在视图中显示nbatpercent
值,如22/5
,当我想提交表单时,表单验证程序会提醒我字段nbatpercent必须是一个数字。
。它无法将22/5
转换为22.5
如果输入22.5就可以了,但是如果属性有值,它会将
转换为/
如何将所有数值属性的区域性转换为en-US
,以显示类似22.5
的值,而不是类似22/5
编辑:我正在使用
@Html.TextBoxFor
显示decimal属性,因为用户应该更改它。尝试显式设置视图格式
@Html.DisplayFor(x => string.Format("{0:0.00}", x.NbatPersent));
否则,您可以为double类型(~/Views/Shared/EditorTemplates/double.cshtml)编写自定义编辑器模板:
在你看来:
@Html.EditorFor(x => x.NbatPersent)
由于
jquery.validate.js
使用以下内容验证值(仅允许
字符作为十进制分隔符),您将获得客户端验证错误
number: function(value, element) {
return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
},
您可以使用jquery.validate.globalize.js
插件(有关更多详细信息,请参阅),或者您可以添加自己的脚本来修改验证器,例如(在jquery.validate.js
之后包含此脚本)
我使用
@Html.TextBoxFor
来显示decimal属性,因为用户应该更改它。我认为这不是一种正确的方法,我认为我们应该更改MVC绑定来更正所有应用程序中的这个问题,而不必更改帮助程序。不是吗?@mohammaddayan这一切都取决于您的要求……使用attribute您可以这样做……[DisplayFormat(DataFormatString=“{0:#,###,0.000#}”,ApplyFormatInEditMode=true)]公共双精度?NbatPersent{get;set;}OP有一个输入错误。将引发异常的是EditFor
,而不是DisplayFor
,甚至不是@Html.TextBox
。事实上,建议的格式取决于是否具有正确的区域性-
是十进制占位符,它没有指定使用点作为占位符尝试此@Html.DisplayFor(x=>x.nbatpercent,string.Format(“{0:0.00}”))
您是否启用了客户端验证。如果是这样,这是由于jquery.validation.js
的结果。您可以使用jquery.globalize.js
来解决这个问题。将22/5
更改为22.5
没有意义,因为当您提交表单时,它将在服务器上失败,除非您使用自定义ModelBinder
@StephenMuecke我们应该如何使用jquery.globalize.js
。看一看。你也可以不用插件(手动更改验证器)来实现这一点,我将在后面添加一个答案注意:替换$.isNumeric(…)位
和正确的正则表达式。最后一部分是(?:/\d+)
,但我不知道波斯语的千位分隔符是什么,所以不确定(?:,\d{3})+
需要什么(即使用什么来代替,
)谢谢,但是我得到了Uncaught TypeError:Globalize.culture不是一个函数
error你在回答中使用的是插件而不是脚本吗?实际上,我用jquery Globalize nuget包安装了Globalize。我使用了那篇文章,没有任何问题(但那是大约两年前的事了)。我不确定你可能做错了什么,因此你需要用你尝试过的相关代码问一个新问题(但在我的答案中只使用脚本更容易,而且不需要使用插件)
@Html.EditorFor(x => x.NbatPersent)
number: function(value, element) {
return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
},
$.validator.methods.number = function (value, element) {
return this.optional(element) || $.isNumeric($(element).val().replace('/', '.'));
}