MVC3编辑十进制字段和本地化

bza*_*fir 10 asp.net-mvc localization number-formatting asp.net-mvc-3

我的语言环境使用逗号,,而不是.小数点分隔符的点.

在MVC3中,当我打开一个显示小数值的编辑视图时

@Html.EditorFor(model => model.MyDecimalVal)
Run Code Online (Sandbox Code Playgroud)

值正确显示.

当我用逗号输入值时,我得到错误"值不是数字",如果我用点输入值,我没有错误,但实际上没有保存任何值.

如何处理这种情况?

Nat*_*lor 19

此博客文章建议覆盖默认的jQuery验证编号和范围规则,以便启用逗号小数分隔符的客户端支持.

为了解决这些问题,我们可以从jquery.validate.js文件中获取range()和number()函数的默认实现.然后我们创建另一个.js文件(比如说jQueryFixes.js),我们在其中覆盖这些默认函数,其中包含对逗号作为小数分隔符的支持.该文件的内容应该是这样的:

$.validator.methods.range = function (value, element, param) {
    var globalizedValue = value.replace(",", ".");
    return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]);
}

$.validator.methods.number = function (value, element) {
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:[\s\.,]\d{3})+)(?:[\.,]\d+)?$/.test(value);
}
Run Code Online (Sandbox Code Playgroud)


tug*_*erk 6

通过调整验证逻辑来​​解决这个问题已经解释过,所以这里有一个不同的方法.

<system.web>如果要将文化设置为,请将以下代码放在节点下的web.config文件中en.它将处理小数分隔符:

<globalization culture="en-US" uiCulture="en" />
Run Code Online (Sandbox Code Playgroud)

我不确定,但是DateTime,你仍然绑定到服务器的语言环境.

  • 这个世界如何成为一种解决方案 - 将文化强加于英语? (4认同)