私は非常に基本的なシナリオを持っています:
私のモデルでは:
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 が私のためにこれを行うことを期待していました。
- 現時点では、クライアント側の検証は両方を受け入れますが、サーバー側の検証は正しい方のみを受け入れます。
どうすればこれを解決できますか?