【问题标题】:MVC 5 - can not get globalisation runningMVC 5 - 无法让全球化运行
【发布时间】:2017-06-26 15:31:05
【问题描述】:

我想添加全球化,因为该网站要求用户提供日期。我的德国用户想输入“31.12.1966”而不是“1966-12-31”。

所以我添加了 nuget-Packages “jQuery.Validation.Globalize”和 “jquery-全球化” 到项目。

现在我无法配置我的 BundleConfig!根据我的研究,我知道我需要 globalize.js 和其他一些文件。所以我尝试制作一个捆绑包:

 bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-{version}.js"));

        bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
            "~/Scripts/jquery.validate*"));

        bundles.Add(new ScriptBundle("~/bundles/global").Include(
           "~/Scripts/globalize.js",
           "~/Scripts/cldr.js").IncludeDirectory("~/Scripts/cldr/",
           "~/Scripts/globalize/")
           );

视图中的使用:

...
@section Scripts {

@Scripts.Render("~/bundles/global")
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/unobtrusiveajax") 


<script type="text/javascript">


    $(function () {
        $.validator.methods.date = function (value, element) {
            Globalize.culture("de-DE");
            // you can alternatively pass the culture to parseDate instead of
            // setting the culture above, like so:
            // parseDate(value, null, "en-AU")
            return this.optional(element) || Globalize.parseDate(value) !== null;
        }
    });
</script>
}            

但我得到一个错误:

Error at line 9, column 5 in http://localhost:58289/Scripts/jquery.validate.globalize.js
0x800a138f - runtimeerror in JavaScript: 
The property "methods" of a undefindes or null-pointer can not bei called

我翻译了这个德语原文的信息:

Ausnahmefehler in Zeile 9, Spalte 5 in http://localhost:58289/Scripts/jquery.validate.globalize.js
0x800a138f - Laufzeitfehler in JavaScript: 
Die Eigenschaft "methods" eines undefinierten oder Nullverweises kann nicht abgerufen werden.

我需要捆绑包中的更多/其他文件吗?

我能做什么?有什么帮助吗?

真诚的 彼得

【问题讨论】:

  • 可以试试 Globalize 1.x(新版本)吗?
  • 我使用 Glabalize 1.2.2
  • 在 Globalize 1.x 上,没有 Globalize.culture。恐怕您正在使用 0.x API 和新的 1.x 库

标签: jquery asp.net-mvc-5 asp.net-mvc-validation jquery-globalize javascript-globalize


【解决方案1】:

我是这样解决的:

在我看来是以下脚本块:

<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/cldr/unresolved.js"></script>

<script src="~/Scripts/globalize.js"></script>
<script src="~/Scripts/globalize/currency.js"></script>
<script src="~/Scripts/globalize/number.js"></script>
<script src="~/Scripts/globalize/date.js"></script>
<script src="~/Scripts/globalize/plural.js"></script>
<script src="~/Scripts/globalize/relative-time.js"></script>
<script src="~/Scripts/globalize/unit.js"></script>
<script src="~/Scripts/jquery.validate.globalize.js"></script>


<script>
    $(document).ready(function () {
        // Use $.getJSON instead of $.get if your server is not configured to return the
        // right MIME type for .json files.
        $.when(
            $.get("/Scripts/cldr/main/de/ca-gregorian.json"),
            $.get("/Scripts/cldr/main/de/numbers.json"),
            $.get("/Scripts/cldr/supplemental/likelySubtags.json"),
            $.get("/Scripts/cldr/supplemental/timeData.json"),
            $.get("/Scripts/cldr/supplemental/weekData.json")
        ).then(function () {
            // Normalize $.get results, we only need the JSON, not the request statuses.
            return [].slice.apply(arguments, [0]).map(function (result) {
                return result[0];
            });
        }).then(Globalize.load)
    .then(function () {
        Globalize.locale("de-DE");
    });
    });

我的数据类有这样的注释:

...
[Required]
    [DataType(DataType.DateTime)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd.MM.yyyy}")]
    public DateTime Geburtsdatum { get; set; }
...

而且 - 非常重要!! - 你必须得到数据文件! 这是必要的,因为 clrd-data 不是 NuGet-Packages "jQuery.Validation.Globalize" / "jquery-globalize" 的一部分。 (是的,在项目页面上提到过 - 但我没有看到它...... :-( )

我安装了 Bower(每个 NuGet),然后通过 Bower 安装了 Cldr-data。示例:

 bower install cldr-dates-full

(请参阅软件包概述和安装说明1

然后我将所需的 json 文件(在这里您可以找到用于文件选择的在线工具 2)从目录“bower_components”分别移动到“scripts\cldr\main\de”和“scripts\cldr\supplemental” .

我将它们添加到项目中并将它们标记为“内容”、“无副本”。

所以终于成功了!!! :-)

如果我管理它来捆绑 js 和 json 文件,我会更新答案。

【讨论】:

  • 你有没有成功捆绑json文件? (js-文件应该不是问题,不是吗?)
  • 对不起,我没有管理它。问题是文件的顺序。我不会编写自己的 bundlehandler 并且默认按字母顺序排列它们。这不起作用!
  • 我找到了 globalize-compiler - 它很好地完成了捆绑。不过要让它运行起来并不容易。
猜你喜欢
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多