Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MVC中的十进制符号问题,C#?_C#_Asp.net Mvc_Asp.net Mvc 5_Culture - Fatal编程技术网

MVC中的十进制符号问题,C#?

MVC中的十进制符号问题,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就可以了,但是如果属性有值,它会将转换为/ 如何将所有数值属性

我正在使用MVC5.0
我在配置中设置了区域性:

<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('/', '.'));
}