0

私は非常に基本的なシナリオを持っています:

私のモデルでは:

public Double MyNumber { get; set; }

(ここまで注釈なし)

私からしてみれば:

<input type="hidden" id="locale" value="@System.Threading.Thread.CurrentThread.CurrentUICulture"/>

@Html.LabelFor(model => model.MyNumber)
@Html.EditorFor(model => model.MyNumber)
@Html.ValidationMessageFor(model => model.MyNumber)

同じページの私の JavaScript コードでは:

<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>
<script src="/Scripts/cldr.js"></script>
<script src="/Scripts/cldr/event.js"></script>
<script src="/Scripts/cldr/supplemental.js"></script>
<script src="/Scripts/globalize.js"></script>
<script src="/Scripts/globalize/number.js"></script>
<script src="/Scripts/globalize/date.js"></script>
<script src="/Scripts/jquery.validate.globalize.js"></script>

<script>
    $.when(
        $.getJSON("/Scripts/cldr/supplemental/likelySubtags.json"),
        $.getJSON("/Scripts/cldr/main/" + $("#locale").val() + "/numbers.json"),
        $.getJSON("/Scripts/cldr/supplemental/numberingSystems.json"),
        $.getJSON("/Scripts/cldr/main/" + $("#locale").val() + "/ca-gregorian.json"),
        $.getJSON("/Scripts/cldr/main/" + $("#locale").val() + "/timeZoneNames.json"),
        $.getJSON("/Scripts/cldr/supplemental/timeData.json"),
        $.getJSON("/Scripts/cldr/supplemental/weekData.json")
        ).then(function () {
            return [].slice.apply(arguments, [0]).map(function (result) {
                return result[0];
            });
        }).then(Globalize.load).then(function () {
            Globalize.locale($("#locale").val());
        }).then(console.log("LOADED EVERYTHING"));
</script>

ページのロード時にエラーが発生しないため、グローバライズの初期化が成功したと推測します

さて、問題は (nl-BE カルチャを使用する場合) です。

  • クライアント側の検証では、1.23 と 1,23 の両方が受け入れられます。
  • nl-BE カルチャに従って、1,23 のみを受け入れる必要があります。
  • サーバー側の検証 (.NET) は期待どおりに機能し、1.23 を拒否します。

注釈を追加する必要がありますか? デフォルトでは、基本的な検証に注釈は必要ないと思います。

JQuery.Globalize検証に何か問題がありますか? (0.x バージョンの方がはるかに使いやすかったと言わざるを得ません。CLDR データを含むこの 1.x バージョンは、npm や bower を使用せずに nuget のみを使用する場合は非常に複雑です)

明確にするために、これらは私の期待ですが、期待しすぎているかもしれません

  • ユーザーは異なるカルチャを切り替えることができます。これらの文化の中には、PI に 3.14 を期待するものもあれば、PI に 3.14 を期待するものもあります。
  • 「。」が存在する文化では。クライアント側の検証で「3.14」のみを受け入れ、「3,14」が入力されたときにエラーを表示するようにします。
  • 「,」が小数点記号であるカルチャでは、クライアント側の検証で「3,14」のみを受け入れ、「3.14」が入力されたときにエラーを表示するようにします。
  • このようにして、クライアント側とサーバー側の検証が同期されます。
  • どういうわけか、私は JQuery.Globalize が私のためにこれを行うことを期待していました。
  • 現時点では、クライアント側の検証は両方を受け入れますが、サーバー側の検証は正しい方のみを受け入れます。

どうすればこれを解決できますか?

4

0 に答える 0