带有 jquery 验证和 Html.EditorFor 以及不同小数分隔符的 asp.net mvc

Posted

技术标签:

【中文标题】带有 jquery 验证和 Html.EditorFor 以及不同小数分隔符的 asp.net mvc【英文标题】:asp.net mvc with jquery validation and Html.EditorFor and different decimalseparators 【发布时间】: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。 【参考方案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 可以解决您的问题。

【讨论】:

以上是关于带有 jquery 验证和 Html.EditorFor 以及不同小数分隔符的 asp.net mvc的主要内容,如果未能解决你的问题,请参考以下文章

使用带有最小值和最大值的 jQuery 验证体验下拉列表

带有 JQuery 验证的 Kendo DatePickerFor

带有 jquery datepicker 错误的 jquery 验证插件(请输入有效日期)

带有 jquery 验证和 Html.EditorFor 以及不同小数分隔符的 asp.net mvc

带有图标的输入字段的Jquery验证发送错误消息

带有输入颜色的 jQuery 表单验证