Validation MVC DateTime – Format UK Date

J’ai une vue simple avec deux champs de date avec des contrôles ValidationMessageFor ajoutés pour la validation JavaScript discrète.

Mon problème est que je continue à être informé que ma date est invalide, quand elle est au format correct (jj / MM / aaaa)

J’ai ajouté à mon fichier web.config, et aussi [DisplayFormat(DataFormatSsortingng = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] sur chaque propriété DateTime, mais n’accepte toujours pas les dates de format UK.

Y a-t-il quelque chose d’évident qui me manque ici?

En fait, il vous suffit de surcharger la méthode de validation JavaScript discrète pour la date

 jQuery(function ($) { $.validator.addMethod('date', function (value, element) { if (this.optional(element)) { return true; } var ok = true; try { $.datepicker.parseDate('dd/mm/yy', value); } catch (err) { ok = false; } return ok; }); }); 

L’exemple de Bohdan a fait plaisir! J’ai +1 votre compagnon de réponse.

Pour être complet, j’ai écrit un article sur l’intégration de toutes les parties (Model, View, EditorTemplate personnalisé, jQuery inclut et ajoute la solution de Bohdan).

Vous pouvez le lire ici: http://www.kestrelblackmore.com/blog/jquery-datepicker-mvc4

Je sais que c’est ancien mais en l’utilisant, j’ai ajouté à l’entrée un atsortingbut avec le format de date actuel (que j’ai récupéré depuis le code ASP MVC avec CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.ToLower ()).

Ensuite, j’ai réécrit le javascript de validation pour utiliser le format trouvé dans l’atsortingbut.

  var format = "mm/dd/yyyy"; if (element.atsortingbutes["data-format"]) { format = element.atsortingbutes["data-format"].value; } 

Je lis aussi le même atsortingbut pour le jquery ui datepicker. Ce n’est peut-être pas très utile, mais cela peut au moins maintenir le format compatible avec la culture. Bien que cela puisse aider quelqu’un

J’ai pris une approche différente pour résoudre ce problème par rapport à d’autres réponses. Utilisez jQuery pour append une nouvelle fonction de date qui forcera la date à utiliser la culture locale actuelle définie dans l’application.

 $.validator.addMethod('date', function (value, element) { var d = new Date(); return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateSsortingng(value))); }); 

C’est si cela échoue lors de la validation jQuery. Je crédite cette réponse à Elton Stoneman poste qui peut être lu ici

J’espère que cela aidera quelqu’un d’autre.

Essayez de changer cela directement dans jquery.validate.js. Travailler avec $ .datpicker

 date: function (value, element) { var s = value; var ind2 = 3; var ind3 = 6; var ind4 = 4; if (s.substr(6, 1) != "2") { ind2 = ind2 + 1; ind3 = ind3 + 1; ind4 = ind4 + 1; } var ndan = s.substr(0, 2); var nmje = s.substr(ind2, 2); var ngod = s.substr(ind3, ind4); var ns = ngod + "," + nmje + "," + ndan; return this.optional(element) || !/Invalid|NaN/.test(new Date(ns));