2011-01-14 9 views
11

Mam witrynę, która używa kalendarza jquery do wyświetlania zdarzeń. Zauważyłem, niż w przypadku korzystania z systemu z poziomu IE (wszystkie wersje) ASP.NET MVC nie uda się powiązać datetime z działaniem, które odsyła poprawne zdarzenia.Obiekt javascript daty z IE nie może być automatycznie powiązany z datetime w ASP.NET MVC

Sekwencja zdarzeń wygląda następująco.

  • posty kalendarza do serwera, aby uzyskać zdarzenia
  • Server ActionMethod akceptuje termin rozpoczęcia i zakończenia, automatycznie wiąże się z datetime obiektów

W każdej przeglądarce innej niż IE data rozpoczęcia i zakończenia przyjść przez jako:

Mon, 10 Jan 2011 00:00:00 GMT 

Kiedy IE posty datę, to przychodzi poprzez jako

Mon, 10 Jan 2011 00:00:00 UTC 

Program ASP.NET MVC 2 nie może automatycznie powiązać tego z parametrem metody działania.

Czy istnieje powód, dla którego tak się dzieje? kod, który księguje do serwera jest następujący:

data: function (start, end, callback) { 
     $.post('/tracker/GetTrackerEvents', { start: start.toUTCString(), end: end.toUTCString() }, function (result) { callback(result); }); 
    }, 
+0

Kolejną wielką cechą IE. Rzeczywiście piekło mylące. Spójrz na ten http://www.west-wind.com/Weblog/posts/5054.aspx – Sentient

Odpowiedz

3

spróbować zastąpić

start.toUTCString() 

z

start.toUTCString().replace('UTC','GMT') 

i zobaczyć, czy to nie rozwiąże problemu dla Ciebie:)

0

Znam również tę dziwną sytuację. Zastąpienie UTC do GMT w ciągu dat rozwiązało mój problem, ale chciałem poszukać innego sposobu (zastąpienie ciągów czasami powoduje problemy :)).

mam wymyślić poniższego rozwiązania, które sprawdziły się w IE, Chrome i Firefox:

var myUTCDateString = (function(d) { 
      return d.getUTCFullYear() + "-" + (d.getUTCMonth() +1) + "-" + d.getUTCDate() + " " + d.getUTCHours() + ":" + d.getUTCMinutes() + ":" + d.getUTCSeconds(); 
    })(new Date()); 

myUTCDateString jest coś takiego jak "2012-1-3 21:47:49".

0

Znalazłem here i modyfikowane pomocnika:

// #region Date.prototype.toISONonUtcString 
// add Date prototype toISONonUtcString function if it doesn't yet exist 
if ($.isFunction(Date.prototype.toISONonUtcString) === false) { 
Date.prototype.toISONonUtcString = function() { 
    var pad = function (n, places) { 
     n = n.toString(); 
     for (var i = n.length; i < places; i++) { 
      n = "0" + n; 
     } 
     return n; 
    }; 
    var d = this; 
    return pad(d.getFullYear(), 4) + '-' + pad(d.getMonth() + 1, 2) + '-' + pad(d.getDate(), 2) + 'T' + 
       pad(d.getHours(), 2) + ':' + pad(d.getMinutes(), 2) + ':' + pad(d.getSeconds(), 2) + '.' + 
       pad(d.getMilliseconds(), 3); 
}; 
} 
// #endregion 
9

wpadłem na ten sam problem i rozwiązać go za pomocą JavaScript Date() 's .toISOString() funkcji (zamiast robić ciąg zastąpić).

See doc here.

DateTime i DateTimeOffset przetworzy to poprawnie niezależnie od broswer wysłaniem go (w moim ograniczonym testów IE, Firefox i Chrome).

Więc wysłać datę do sterownika jak tak (to jest mój obiekt JS):

var dateObject = new Date(); 
dateObject.toISOString() 

a serwer może przetwarzać dane jak SO (.NET - w sterowniku):

DateTimeOffset timeInGMT = DateTime.Parse(dateString).ToUniversalTime(); //for the time in GMT 
DateTime timeOnClient = DateTime.Parse(dateString); //for time as it was set on the client. 
1

Kiedy korzystać z funkcji .toUTCString() pod IE, miałem problemy z UTC vs GMT a także z wiodącymi zerami.

To co mogę używać do wysyłania datę UTC do ASP.NET MVC:

function getUTCString (date) { 

    function pad(n) { return n < 10 ? "0" + n : n }  

    var weekday = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; 
    var month = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; 

    return weekday[date.getUTCDay()] 
     + ", " + pad(date.getUTCDate()) 
     + " " + month[date.getUTCMonth()] 
     + " " + date.getUTCFullYear() 
     + " " + pad(date.getUTCHours()) 
     + ":" + pad(date.getUTCMinutes()) 
     + ":" + pad(date.getUTCSeconds()) 
     + " GMT"; 
}; 
Powiązane problemy