Convalida MVC DateTime – Regno Unito Formato data

Ho una vista semplice con due campi data con ValidationMessage per i controlli aggiunti per la convalida JavaScript discreto.

Il mio problema è che continuo a sentirmi dire che la mia data non è valida, quando è nel formato corretto (gg / MM / aaaa)

Ho aggiunto al mio web.config e incluso anche [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] su ciascuna proprietà DateTime, tuttavia non accetterà ancora le date in formato UK.

C’è qualcosa di ovvio che mi manca qui?

In realtà devi solo sovraccaricare il metodo di validazione JavaScript discreto per la data

 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’esempio di Bohdan ha funzionato bene! Ho +1 il tuo compagno di risposta.

Per completezza ho scritto un post sul blog su come integrare tutte le parti (Model, View, Custom EditorTemplate, jQuery include e aggiunge la soluzione di Bohdan).

Puoi leggerlo qui: http://www.kestrelblackmore.com/blog/jquery-datepicker-mvc4

So che è vecchio ma usando questo ho aggiunto all’input un attributo con il formato della data corrente (che ho recuperato dal codice MVC ASP con CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.ToLower ()).

Quindi ho riscritto la convalida javascript per utilizzare il formato trovato nell’attributo.

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

Ho letto anche lo stesso attributo per il jquery ui datepicker. Potrebbe non essere così utile, ma può mantenere il formato coerente con la cultura, almeno. Anche se potrebbe aiutare qualcuno

Ho adottato un approccio diverso per risolvere questo problema rispetto ad altre risposte. Utilizzare jQuery per aggiungere una nuova funzione di data che imporrà alla data di utilizzare il set di cultura locale corrente nell’applicazione.

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

Cioè se fallisce con la validazione di jQuery. Attribuisco questa risposta al post di Elton Stoneman che può essere letto qui

Spero che questo aiuti qualcun altro.

Prova a cambiare direttamente in jquery.validate.js. Lavora con $ .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));