【问题标题】:asp.net mvc with jquery validation and Html.EditorFor and different decimalseparators带有 jquery 验证和 Html.EditorFor 以及不同小数分隔符的 asp.net mvc
【发布时间】:2014-03-11 15:19:53
【问题描述】:

我已经阅读了很多关于这个主题的博文,但我从未看到完整的解决方案。

我已经为这个默认的 html 搭建了脚手架(bedrag 是十进制):

<div class="editor-field">
            @Html.EditorFor(model => model.Bedrag)
            @Html.ValidationMessageFor(model => model.Bedrag)
        </div>

这会在页面呈现时为输入控件中的小数点生成一个逗号,即使我将它放在我的 web.config 中也是如此: &lt;globalization culture="en-US" uiCulture="en-US" /&gt; 或者这个 &lt;globalization culture="auto" uiCulture="auto" /&gt;

然后,Jquery 验证插件抱怨我的“bedrag”输入字段中有一个逗号作为小数分隔符(@Html.EditorFor(model =&gt; model.Bedrag) 已将其放在那里),这导致错误我的输入不是数字;它需要一个点作为小数分隔符。

但是,当我输入这个 12.90 的数字时,默认模型绑定器会将我的输入转换为 1290(输入乘以 100)。

然后我创建了一个自定义模型绑定器,在该代码中,当前文化是“nl-NL”,而不是我的 web.config 中的“en-US”。

所以现在我想知道:

1 2014 年我还需要自定义模型绑定器吗?

2 当 ASP.Net 为@Html.ValidationMessageFor(model =&gt; model.Bedrag) 创建值时,使用哪种文化? (为什么不是我的 web.config 中的那个?)

3 如何动态设置用于@Html.ValidationMessageFor(model =&gt; model.Bedrag) 的文化

4 如何动态设置用于 Jquery 验证的区域性?

我已经离开 ASP.Net MVC 一年了,但难道在 2014 年我仍然遇到这些小数点问题吗?

【问题讨论】:

  • 你看过这个 (hanselman.com/blog/…) 博文吗?
  • 是的,我做了,但它有一个指向“jQuery Global 插件”的链接。这是 404,并且到此页面“来自 GitHub 的 700 jQuery Globs”。这也是 404。

标签: jquery validation asp.net-mvc-4


【解决方案1】:

我使用的方法是扩展 jQuery 验证器。它基于this blogpost。我将元数据中的文化设置为 BE-nl。由于这是一个纯粹的荷兰网站,我不再做任何检查。

$(function () {
    // Look in metatag what culture we want
    // and set this as culture for the client side.
    var data = $("meta[name='accept-language']").attr("content");
    Globalize.culture(data.toString());

    // Don't validate on keyup event because it will mess up
    // the cursor when replacing values in a textbox.
    $('form').each(function () {
        var validator = $(this).data('validator');
        if (validator) {
            validator.settings.onkeyup = false;
        }
    });

    // Belgianize/sanitize the numbers inserted
    // 1 000 000    =>      1000000
    // 1.00         =>      1,00
    $.validator.methods.number = function (value, element) {
        var s = value.replace(/\ /g, '').split('.').join(',');

        if (s.split(',').length < 3) {
            var number = Globalize.parseFloat(s);
            if (!isNaN(number)) {
                $(element).val(s);
                return this.optional(element) || true;
            }
        }

        return this.optional(element) || false;
    };
});

我想我用this jQuery library 来进行全球化

【讨论】:

    【解决方案2】:

    我认为使用jQuery Globalization Plugin from Microsoft 可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 2013-11-07
      • 2012-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多