4

グローバリゼーションを使用して小数フィールドを検証するのに苦労しています。

値をフランス語形式にする必要があります(小数点記号としてカンマを使用し、千区切り記号は使用しません)。

編集:この素晴らしいソリューションに従って更新

だから、ここに私のモデルがあります:

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" />

次のように「localizationHelper」を追加しました。

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 で使用するもの:

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

Globalize.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」と表示されるため、検証エラーが発生します。

その場合は「.」テンキーのボタンはコマとして理解されるものとします。

何かアイデア、何が欠けていますか?

4

1 に答える 1

0

そう、

グローバリゼーションの問題については、解決策がここにあり、私の質問の編集に反映されています(これまでのところ完全に機能しているようです)。

ポイント/コンマの問題については、ここで私がしたことです

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>
于 2013-10-29T09:50:51.853 に答える