Search code examples
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

    • an short todo.txt (de and en)
    • the cldr-data (jsons) in sub-directories
    • a custom HTML-Helper-class wich writes the needed HTML/js-Scripts to the view.

    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?