asp.net-mvc-5javascript-globalize

MVc 5 - validation german date with unobtrusiv js - a simple approach


The question: How get the unobtrusiv validation of a german date running in MVC?

Because I can't find a running example of using globalize 1.x with MVC 5 to validate a german date I needed two days to get it running.

The problems are the order of the js-files, getting the cldr-data and putting it all together in an way it can be reused.

In the answer I will show my current solution.


Solution

  • In this zip-file (https://www.dropbox.com/sh/75dx6alck7itwia/AABFkcgOQVc1bUXFE_jYfR_da?dl=0) you find all files you need.

    It includes

    It seems, that rendering by the helper not allways works. So if there are problems with that, copy the code to every (edit / new) view.

    <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/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");
        });
        });
    </script>
    

    I hope it helps.

    This solution based on the answer to MVC 5 - can not get globalisation running. If you want to use a bündle, see MVC 5, globalize, validate german date: How to bundle the js-scripts?