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>

加载页面时我没有收到任何错误,因此我认为 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 为我做这件事。
  • 目前,客户端验证接受两者,但服务器端验证只接受正确的一个。

我该如何解决这个问题?

4

0 回答 0