MVC Jquery 全球化 - 验证小数

本文关键字:验证 小数 全球化 Jquery MVC | 更新日期: 2023-09-27 18:37:04

我正在努力使用全球化来验证十进制字段。

我需要我的值是法语格式(逗号作为小数点分隔符,没有千位分隔符)。

编辑:以下更新 这个伟大的解决方案

所以,这是我的模型:

public class CompanyTaxHistoryModel
{
    [Required]
    public DateTime DateFrom { get; set; }
    [Required]
    public DateTime DateTo { get; set; }
    [Required]
    [Range(0, 100, ErrorMessage = "The percentage must be between 0 and 100")]
    [DisplayFormat(DataFormatString = "{0:N} %")]
    [Display(Name = "Company Tax")]
    public decimal CompanyTaxPercent { get; set; }
}

这是我的 web.config :

<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" culture="auto" uiCulture="auto" />

我添加了一个"本地化助手",如下所示:

namespace xxxx.Helpers
{
    public static class LocalizationHelpers
    {
        public static IHtmlString MetaAcceptLanguage<t>(this HtmlHelper<t> html)
        {
            var acceptLanguage = HttpUtility.HtmlAttributeEncode(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString());
            return new HtmlString(String.Format("<meta name='"accept-language'" content='" {0}'">",acceptLanguage));
        }
    }
}

我在_Layout.cshtml中使用的Wich:

@using xxxx.Helpers
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    @Html.MetaAcceptLanguage() 

我已将全球化.js+所需的文化添加到我的项目中,并将以下内容添加到我的脚本中:

$(document).ready(function () {
    var data = $("meta[name='accept-language']").attr("content")
    Globalize.culture(data);
});
$.validator.methods.date = function (value, element) {
    return Globalize.parseDate(value);
};
$.validator.methods.range = function (value, element, param) {
    return this.optional(element) || (Globalize.parseFloat(value) >= param[0] && Globalize.parseFloat(value) <= param[1]);
}
$.validator.methods.number = function (value, element) {
    return !isNaN(Globalize.parseFloat(value));
}

一切似乎都很好,但我对十进制值有问题,因为任何键盘的"."按钮都应该呈现适当的值(根据当地文化,"."或",")。

例如,我的浏览器设置为 fr-FR,如果我仅使用数字键盘键入"12,5",我会得到"12.5",因此出现验证错误。

在这种情况下,数字键盘的"."按钮应理解为昏迷。

任何想法,我错过了什么?

MVC Jquery 全球化 - 验证小数

所以,

对于全球化问题,解决方案就在这里,并反映在我的问题的编辑中(到目前为止似乎效果很好)。

至于点/逗号问题,这是我所做的

function validateFrNumber(e) {
        theCulture = Globalize.cultureSelector;
        foundFR = theCulture.indexOf("FR")
        foundfr = theCulture.indexOf("fr")
        if (foundFR != '-1' || foundfr != '-1') {
            theValeur = $(e).find("input").val();
            foundDot = theValeur.indexOf(".");
            if (foundDot > -1) {
                $(e).find("input").attr('value', theValeur.replace(".", ","));
            }
        }
}

然后在输入 onkeyup 中调用它:

<div class="input" onkeyup="validateFrNumber(this)">@Html.EditorFor(model => model.MydecimalValue)</div>