我有一个非常基本的场景:
在我的模型中:
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>
加载页面时我没有收到任何错误,因此我认为 Globalize 初始化成功
现在,问题是(使用 nl-BE 文化时):
- 客户端验证接受 1.23 和 1,23。
- 根据 nl-BE 文化,应该只接受 1,23。
- 服务器端验证 (.NET) 按预期工作,并拒绝 1.23。
我需要添加注释吗?我假设默认情况下基本验证不需要注释。
JQuery.Globalize
我在验证方面做错了吗?(我必须说,0.x 版本更容易使用。当你不想使用 npm 或 bower,而只使用 nuget 时,这个带有 CLDR 数据的 1.x 版本非常复杂)
为了清楚起见,这些是我的期望,但也许我期望太多
- 用户可以在不同的文化之间切换。其中一些文化期望 PI 为 3.14,有些文化期望 PI 为 3.14
- 在一个文化里“。” 是小数点分隔符,我希望客户端验证只接受“3.14”,并在输入“3,14”时显示错误。
- 在“,”是小数分隔符的文化中,我希望客户端验证仅接受“3,14”,并在输入“3.14”时显示错误。
- 这样,客户端和服务器端验证就会同步。
- 不知何故,我希望 JQuery.Globalize 为我做这件事。
- 目前,客户端验证接受两者,但服务器端验证只接受正确的一个。
我该如何解决这个问题?