asp.net mvc与jquery验证和Html.EditorFor以及不同的decimalseparators

时间:2014-03-11 15:19:53

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

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

我已经支持这个默认的html(其中bedrag是十进制的):

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

当呈现页面时,这会在输入控件中为小数生成逗号,即使我将其放在web.config中:     <globalization culture="en-US" uiCulture="en-US" />或者这个 <globalization culture="auto" uiCulture="auto" />

然后,Jquery Validation插件抱怨我在我的&#39; bedrag&#39;中有一个逗号作为小数点分隔符。输入字段(由@Html.EditorFor(model => model.Bedrag)放在那里),它给出错误我的输入不是数字;它期望一个点作为小数分隔符。

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

然后我创建了一个自定义模型绑定器,并且在该代码中,当前文化是&#39; nl-NL&#39;所以不是&#39; en-US&#39;来自我的web.config。

所以现在我想知道:

1 2014年我是否还需要自定义模型装订器?

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

3如何动态设置用于@Html.ValidationMessageFor(model => model.Bedrag)

的文化

4如何动态设置用于Jquery验证的文化?

我已经退出ASP.Net MVC一年了,但是在2014年我仍然会遇到这些带小数字符号的问题吗?

2 个答案:

答案 0 :(得分: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进行全球化

答案 1 :(得分:0)

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