2013-01-16 19 views
8

Sto utilizzando Angular JS per ottenere e inviare dati al mio controller MVC 4 come JSON. Tutte le mie proprietà vengono convertite correttamente tranne il DateTime/DateTime? tipi. Mi piacerebbe avere un approccio "imposta e dimentica" per gestire le date in modo che le nuove classi e/o proprietà aggiunte non debbano ricordare di eseguire alcune conversioni speciali per gestire correttamente una data. Ho visto i seguenti approcci e possibili svantaggi. Quale approccio usano le persone là fuori per la stessa piattaforma? C'è qualcosa in MVC4 che sta gestendo questo correttamente che potrei non aver configurato? Qualsiasi suggerimento sarà molto apprezzato.Dati JSON angolari js con associazione modello MVC per DateTime?

  1. Raccoglitore modello personalizzato. Come dettagli nel blog . Possibili problemi di prestazioni .
  2. Eseguire alcune modifiche sul lato JS. Come indicato in Robert Koritnik's blog. Questo non sembra funzionare per Angular js, forse c'è un'impostazione nel $ http.post che permetterà a questo di funzionare ma il mio oggetto ha tutti i valori nulli con questo approccio.
  3. Avere alcune proprietà aggiuntive come FormattedDateTime che possono essere convertite nell'azione POST. Questo non è un "set it and forget it approach" benché permetta di visualizzare correttamente le date sul lato client che sono ancora nel formato '/ Date (695573315098) /'

Si prega di consultare il seguente codice esempio. C# classe:

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

angolare JS Controller:

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: private Content-Type: application/json; charset = utf-8 Server: Microsoft-IIS/8.0 X-AspNetMvc-Version: 4.0 X-aspnet-Versione: 4.0.30319 X-SourceFiles:???? = UTF-8 B YzpcdXNlcnNcbmlja1xkb2N1bWVudHNcdmlzdWFsIHN0dWRpbyAyMDEyXFByb2plY3RzXFZhbGlkYXRpb25UZXN0XEhvbWVcR2V0UGVyc29uXDE = = X- Powered-By: ASP.NET Data: Mer, 16 Gen 2013 14:48:34 GMT Contenuto: 124

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

come si può vedere con i dati di Fiddler la data è venuta su come una data JSON, ma quando colpisce la POSTAMI la proprietà DateTime non è corretta e il DateTime? la proprietà è nulla.

enter image description here

+5

vorrei andare con la soluzione di Phil Haack. Le date JSON dovrebbero essere in un formato leggibile da JavaScript quando lasciano il server. Si tratta di JavaScript Object Notation, dopotutto. –

+2

+1 su Haack. Utilizzando JSON.NET risolverà il problema del datetime e il formato di serializzazione sciocco dei dizionari .NET. –

risposta

Problemi correlati