【问题标题】:MVC3 edit for decimal fields and localization十进制字段和本地化的 MVC3 编辑
【发布时间】:2011-12-27 10:41:52
【问题描述】:

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

在 MVC3 中,当我打开一个编辑视图时,其中的十进制值显示为

@Html.EditorFor(model => model.MyDecimalVal)

值显示正确。

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

如何处理这种情况?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 localization number-formatting


    【解决方案1】:

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

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

    <globalization culture="en-US" uiCulture="en" />
    

    我不确定,但对于 DateTime,您仍然绑定到服务器的区域设置。

    【讨论】:

    • 谢谢,这处理了日期时间和数字格式(但强制它们用于 en locale)
    • @bzamfir 对。我所说的这种方法是一种临时修复。永久修复将配置您的服务器语言环境。
    • 这到底是怎么解决的 - 将文化强制改为英语?
    • @gangelo 当最终用户不关心文化的特定价值时,我非常确定这是一个非常好的解决方案!
    • 这真是太棒了。你拯救了我的一天,谢谢。
    【解决方案2】:

    This blog post 建议覆盖默认的 jQuery 验证数字和范围规则,以启用对逗号小数分隔符的客户端支持。

    要解决这些问题,我们可以从 用于 range() 和 number() 函数的 jquery.validate.js 文件。我们 然后创建另一个 .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);
    }
    

    【讨论】:

    • 有什么合适的方法吗?
    • 我的意思是,在不同的文化中处理不同的十进制值呢?当然,我只想将值存储在一种文化中,但我想让网页的访问者有机会在他的文化中输入和验证十进制值。
    • @Christoph Brückmann,我参加聚会有点晚了,但这个解决方案有效。在法语中,它接受 140.44 美元,在英语中,它接受 140.44 美元。
    猜你喜欢
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多