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

时间:2015-09-27 13:58:03

标签: c# asp.net-mvc asp.net-mvc-5 culture

我使用的是MVC 5.0 我在config中设置了文化:

<system.web>
   <globalization uiCulture="fa-IR" culture="fa-IR" />
</system.web>

我有一个模型如下:

public class MyModel
{
   [DisplayName("NbatPersent")]
   [Range(0, 100)]
   public double NbatPersent{ get; set; }
}

MVC在视图中显示NbatPersent22/5,当我想提交表单时,表单验证器提醒我The field NbatPersent must be a number.。它无法将22/5转换为22.5
如果我输入22.5就可以了,但如果属性有值,则将.转换为/

如何转换所有数字属性&#39;文化到en-US以显示22.5之类的值,而不是22/5

修改
我使用@Html.TextBoxFor来显示小数属性,因为用户应该更改它。

2 个答案:

答案 0 :(得分:3)

jquery.validate.js导致客户端验证错误,该错误使用以下内容验证值(仅允许.字符作为小数点分隔符。

number: function(value, element) {
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
},

您可以使用jquery.validate.globalize.js插件(有关详细信息,请参阅this article),也可以添加自己的脚本来修改验证器(例如,在jquery.validate.js之后包含此内容)

$.validator.methods.number = function (value, element) {
   return this.optional(element) || $.isNumeric($(element).val().replace('/', '.'));
}

答案 1 :(得分:2)

尝试明确设置视图格式

@Html.DisplayFor(x => string.Format("{0:0.00}", x.NbatPersent));

否则你可以为double类型编写自定义编辑器模板(〜/ Views / Shared / EditorTemplates / double.cshtml):

@model double?
@Html.TextBox("", Model.HasValue ? Model.Value.ToString("#,##0.000#") : "")

然后在你看来:

@Html.EditorFor(x => x.NbatPersent)