【发布时间】:2016-06-22 04:34:18
【问题描述】:
我正在尝试在 MVC5 中使用带有 jquery globalize 插件的 MVC 非侵入式验证(与包 jquery-validate-globalize 一起使用)。出于学习目的,我按照here 启动了一个演示项目,但它无法使用 globalize 运行(它适用于默认的 Microsoft 非干扰验证)。模型很简单:
public class GlobalizeModel
{
[Range(10.5D, 20.3D)]
public decimal Double { get; set; }
[Required]
public DateTime? DateTime { get; set; }
}
我尝试在 _Layout 页面底部按如下方式启动 Globalize(视图最小,只有 2 个输入):(我从 https://johnnyreilly.github.io/globalize-so-what-cha-want/ 获取必要文件列表)
<script src="~/Scripts/bootstrap.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
<!--cldr scripts-->
<script src="~/Scripts/cldr.js"></script>
<script src="~/Scripts/cldr/event.js"></script>
<script src="~/Scripts/cldr/supplemental.js"></script>
<!--globalize scripts-->
<script src="~/Scripts/globalize.js"></script>
<script src="~/Scripts/globalize/number.js"></script>
<script src="~/Scripts/globalize/date.js"></script>
<!--jquery globalize-->
<script src="~/Scripts/jquery.validate.globalize.js"></script>
<script>
$.when(
$.getJSON("/Scripts/cldr/supplemental/likelySubtags.json"),
$.getJSON("/Scripts/cldr/main/en/numbers.json"),
$.getJSON("/Scripts/cldr/supplemental/numberingSystems.json"),
$.getJSON("/Scripts/cldr/main/en/ca-gregorian.json"),
$.getJSON("/Scripts/cldr/main/en/timeZoneNames.json"),
$.getJSON("/Scripts/cldr/supplemental/timeData.json"),
$.getJSON("/Scripts/cldr/supplemental/weekData.json"),
$.getJSON("/Scripts/cldr/main/tr/numbers.json"),
$.getJSON("/Scripts/cldr/main/tr/ca-gregorian.json"),
$.getJSON("/Scripts/cldr/main/tr/timeZoneNames.json"),
console.log("JSONs loaded")
).then(function () {
console.log("start slicing");
return [].slice.apply(arguments, [0]).map(function (result) {
console.log("slicing done");
return result[0];
});
}).then(Globalize.load).then(function () {
Globalize.locale("en");
console.log("Locale set to en");
}).then(console.log("LOADED EVERYTHING"));
</script>
但是当我运行页面时,我只看到控制台日志JSOns loaded 和LOADED EVERYTHING。此外,当我通过在数字文本框中输入任何内容(当然,当焦点丢失时)尝试客户端验证时,我在控制台中收到以下错误:
Uncaught Error: E_DEFAULT_LOCALE_NOT_DEFINED: Default locale has not been defined.
这个帖子here 是类似的,我试图检查那里列出的东西。我认为我的 JSON 对象没有被获取,但我不是很好的 aj JS,所以我不确定。我将以下项目添加到 web.config 以查看这是否与文件服务有关,但无济于事:
<system.webServer>
<staticContent>
<remove fileExtension=".json"/>
<mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>
</system.webServer>
文化在 web.config 中设置为自动,如下所示:
<system.web>
<globalization culture="auto" uiCulture="auto" />
<compilation debug="true" targetFramework="4.5.2"/>
<httpRuntime targetFramework="4.5.2"/>
</system.web>
你可以在这里看到Scripts文件夹结构:
那么,这里的问题是什么?我怎样才能让这件事发挥作用?
【问题讨论】:
-
你有没有发现发生了什么?我认为 console.log("JSONs loaded") 干扰了切片功能。
-
否;我无法解决它,所以我决定不使用
globalize。在实际项目中,我禁用了客户端验证并依赖于文化敏感视图中的服务器验证(例如包括十进制输入的视图)。这个决定背后的原因是我花了太多时间无济于事,还有很多事情等着去做。也许我将来会重新审视这个问题,希望同时全球化技术的进步。附:没有console.log("JSONs loaded"),问题仍然存在。
标签: javascript c# jquery asp.net-mvc jquery-globalize