2013-01-16 18 views
8

Używam Angular JS do pobierania i przesyłania danych do mojego kontrolera MVC 4 jako JSON. Wszystkie moje właściwości są konwertowane poprawnie z wyjątkiem DateTime/DateTime? typy. Chciałbym mieć podejście "ustaw i zapomnij" do obsługi terminów, aby nowe klasy i lub dodane właściwości nie musiały pamiętać, aby wykonać specjalne przekształcenie w celu prawidłowego obchodzenia się z daną datą. Widziałem następujące podejścia i możliwe wady. Jakie podejście mają osoby korzystające z tej samej platformy? Czy jest coś w MVC4, które obsługuje to poprawnie, że nie mam skonfigurowane? Wszelkie sugestie będą bardzo mile widziane.Angular js danych JSON z powiązaniem modelu MVC dla DateTime?

  1. Spoiwo do modelu niestandardowego. Szczegóły na blogu . Możliwe problemy z wydajnością .
  2. Wykonaj pewne modyfikacje po stronie JS. Jak szczegółowo w Robert Koritnik's blog. Nie wydaje się to działać dla Angular js, być może istnieje ustawienie w http.post, które pozwoli to zadziałać, ale mój obiekt ma wszystkie wartości zerowe z tym podejściem.
  3. Mieć dodatkowe właściwości, takie jak FormattedDateTime, które można przekonwertować na akcję POST. To nie jest „ustaw i zapomnij to podejście” choć nie pozwala na prawidłowe wyświetlanie dat w po stronie klienta, które są jeszcze w „/ Data (695573315098) /” formacie

Proszę patrz poniższy kod przykład. C klasa #:

public class Person 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public DateTime BirthDate { get; set; } 
    public DateTime? ApprovedForSomething { get; set; } 
} 

Angular JS Kontroler:

function PersonController($scope, $http) { 
     $scope.getPerson = function() { 
      $http.get('../../Home/GetPerson/1').success(function (data) { 
       $scope.Person = data; 
      }); 
     } 
     $scope.updateApprovedForSomething = function() { 
      $http.post('../../Home/UpdatePerson', { person: $scope.Person }).success(function (data) { 
       console.log(data); 
      }); 
     } 
    } 

Fiddlers POST:

HTTP/1.1 200 OK Cache-Control: prywatny Content-Type: application/json; Charset = UTF-8 serwera: Microsoft IIS/8,0 X AspNetMvc Wersja: 4,0 X aspnet Wersja: 4.0.30319 X SourceFiles:?? = UTF-8 B YzpcdXNlcnNcbmlja1xkb2N1bWVudHNcdmlzdWFsIHN0dWRpbyAyMDEyXFByb2plY3RzXFZhbGlkYXRpb25UZXN0XEhvbWVcR2V0UGVyc29uXDE = X = Powered-By: ASP.NET Data: środa, 16 stycznia 2013 14:48:34 GMT Długość treści: 124

{"FirstName": "Bob", "LastName": "Smith", "BirthDate" : "/ Data (695573315098) /", "ApprovedForSomething": "/ Date (1358261315098) /"}

jak widać z danych Fiddler data jest podchodząc jako data JSON, ale podczas naciśnięcia POST MNIE thod właściwość DateTime nie jest poprawna i DateTime? Właściwość ma wartość NULL.

enter image description here

+5

pójdę roztworem Phil Haack jest. Daty JSON powinny być w formacie odczytywalnym w JavaScript, gdy opuszczają serwer. Jest to JavaScript Object Notation, afterall. –

+2

+1 na Haack. Używanie JSON.NET naprawi problem datetime, a także głupi format serializacji słowników .NET. –

Odpowiedz

Powiązane problemy