2013-10-22 4 views
7

Mam aplikację, którą niedawno zaktualizowałem do .Net 4.5.1 i MVC 4. Używam jQuery datepicker i jQuery. zatwierdzenie 1.11.1.jQuery Data sprawdzania poprawności MVC 4 .Net 4.5.1 UK data "musi być datą" Błąd

Jestem w Wielkiej Brytanii, dlatego daty będą w lokalizacji en-GB ("dd/mm/rrrr"). Próbowałem, co sugeruje here, here i here, ale bezskutecznie.

Mam też w moim web.config:

<globalization uiCulture="en-GB" culture="en-GB" /> 

i ustawiono Globalizacja w IIS do en-GB, ale co to jest data wejścia jest zatwierdzone jako US format daty.

Czy ktoś może pomóc?

+0

miałem ten sam problem jakiś czas temu, nie mógł znaleźć apt rozwiązanie dla tej kwestii, co do pracy ok, ja dezaktywował walidację klienta MVC, napisał własną niestandardową walidację dla 'required' i ustawił pole daty wprowadzenia jako' readonly', aby użytkownicy nie mogli zmienić daty podanej przy użyciu 'datepicker' – AthibaN

+0

Po zastosowaniu powyższego rozwiązania problem ten wystąpi: http://stackoverflow.com/questions/26279779/validation-of-datetimepicker-is-not-working-properly –

Odpowiedz

9

Zmiana sposobu sprawdzania dat w jQuery.validate.js do follwing rozwiązał problem:

date: function (value, element) { 
     $.culture = Globalize.culture("en-GB"); 
     var date = Globalize.parseDate(value, "dd/MM/yyyy", "en-GB"); 
     return this.optional(element) || 
         !/Invalid|NaN/.test(new Date(date).toString()); 
    } 

Testowany w Chrome, FF i IE

+0

Gdzie można go dodać? – Chlebta

+0

W pliku jQuery.validate.js w Twoim rozwiązaniu –

+0

Czy muszę dodać 'Globalize.js', ponieważ zastąpiłem starą' date: function ... 'tym, ale to się nie udało Zawsze jestem Pobieranie "Złożone ... musi być Data" – Chlebta

0

Po prostu musiałem dowiedzieć się tego, ja overrode regułę i używany atrybut danych

if (typeof jQuery.validator.methods.date !== 'function') { 
    var f = function (value, element) { 
     var e = $(element).attr('data-dateformat'); 
     if (e && (e.length)) { 
      var dt = jQuery.datepicker.parseDate(e, value); 
      return this.optional(element) || !/Invalid|NaN/.test(dt.toString()); 
     } else { 
      return this.optional(element) || !/Invalid|NaN/.test(new Date(value).toString()); 
     } 
    } 
    jQuery.validator.addMethod("date", f); 
} else { 
    var m = jQuery.validator.methods.date; 
    var f = function(value, element) { 
     var e = $(element).attr('data-dateformat'); 
     if (e && (e.length)) { 
      var dt = jQuery.datepicker.parseDate(e, value); 
      return this.optional(element) || !/Invalid|NaN/.test(dt.toString()); 
     } else { 
      return m(value, element); 
     } 
    } 
    jQuery.validator.addMethod("date", f); 
} 

zakłada masz datepicker, ale jeśli używasz dat i jQuery, I myśl, że to bezpieczny zakład. Jeśli element ma format daty zdefiniowany w data-dateformat, to będzie go parsować za pomocą tego, w przeciwnym razie powróci do domyślnej reguły daty, a jeśli nie był obecny, implementuje regułę domyślną.

umieściłem to w moim miejscu pliku kodu globalny utrzymać ją na zewnątrz skryptów jQuery

Powiązane problemy