2009-08-12 4 views

risposta

0

Date un'occhiata al post del blog jQuery, Ajax, ASP.NET and dates.

Descrive in dettaglio come utilizzare ASP.NET MVC e jQuery per passare le date tramite JSON tra il server e il lato client.

+0

Questo fornisce alcuni approfondimenti, ma tratta w/jQuery con il servizio Web ASP.NET piuttosto che con un controller MVC restituendo JsonResult tramite Json(). Sono interessato a jQuery per ASP.NET MVC senza MSFT ajax. – ChrisP

+0

Il problema è soprattutto oggetti complessi/w che dispongono di una proprietà data piuttosto che un singolo valore di data. – ChrisP

+0

Il formato JSON è esattamente lo stesso nell'esempio di quello che hai descritto. Data Property o Single Date Value non fa differenza. – Alex

11

Se non si è collegati al serializzatore MS JSON, è possibile utilizzare Json.NET. Viene fornito con un IsoDateTimeConverter per gestire i problemi con la serializzazione delle date. Questo serializzerà le date in una stringa formattata ISO 8601.

Ad esempio, nel nostro progetto la serializzazione myObject viene gestita tramite il seguente codice.

JsonNetResult jsonNetResult = new JsonNetResult(); 
jsonNetResult.Formatting = Formatting.Indented; 
jsonNetResult.SerializerSettings.Converters.Add(new IsoDateTimeConverter()); 
jsonNetResult.Data = myObject; 

Se si decide di prendere l'Json.NET immergersi si potrà anche prendere JsonNetResult in quanto restituisce un ActionResult che può essere utilizzato in un'applicazione ASP.NET MVC. È abbastanza facile da usare.

Per maggiori informazioni visita: Good (Date)Times with Json.NET

+0

Non so come ci siamo persi, grazie – Marc

6

Può essere brutto, ma funziona:

var epoch = (new RegExp('/Date\\((-?[0-9]+)\\)/')).exec(d); 
$("#field").text((new Date(parseInt(epoch[1]))).toDateString()); 

Probabilmente, non è necessario abbinare l'intera stringa, e solo (- [0-? 9] +) è sufficiente ...

1

Dopo aver giocato con la libreria Json.NET, mi chiedo perché sceglierei l'IsoDateTimeConverter su JavascriptDateTimeConverter.

Ho trovato che questo è più facile da usare con le interfacce Ext JS che stavo usando durante la serializzazione delle date da un controller MVC.

JsonNetResult jsonNetResult = new JsonNetResult(); 
jsonNetResult.Formatting = Formatting.Indented; 
jsonNetResult.SerializerSettings.Converters.Add(new JavaScriptDateTimeConverter()); 
jsonNetResult.Data = myObject; 

sto ottenendo questi dati di nuovo in un Ext.data.JsonStore che è in grado di ottenere il valore restituito come una data senza di me dover specificare un formato di data per analizzare con.

 store:new Ext.data.JsonStore({ 
      url: pathContext + '/Subject.mvc/Notices', 
      baseParams: { subjectId: this.subjectId }, 
      fields: [ 
       {name: 'Title'}, 
       {name: 'DateCreated', type: 'date' } 
      ] 
     }), 

Il JSON restituito assomiglia a questo:

[{"Title":"Some title","DateCreated":new Date(1259175818323)}] 

non v'è alcuna ragione per convertire in formato ISO 8601 e di nuovo se non è necessario.

+0

Perché il 'JavaScriptDateTimeConverter' [non produce JSON valido] (http://james.newtonking.com/json/help/?topic=html/DatesInJSON.htm). Se si desidera mantenere l'interoperabilità con una gamma più ampia di client che si aspettano un JSON valido, sarebbe meglio attenersi alla norma ISO 8601. –

29

Questo è stato trovato in another post su Stack   Overflow:

var date = new Date(parseInt(jsonDate.substr(6))); 

La funzione substr tira fuori la "/ Date (" parte, e la funzione parseInt ottiene il numero intero e ignora il ") /" alla fine. Il numero risultante viene passato al costruttore Date.

+0

La soluzione più semplice è la migliore – DalSoft

1

Auto convertire le date sul lato client (se si utilizza jQuery)

-

Non sono stati specificati, ma dal momento che si sta utilizzando ASP.NET MVC si potrebbero utilizzare jQuery. Se lo fai, la conversione in date effettive appena diventato più semplice se si utilizza il codice fornito sul this blog post. Il codice estende la funzionalità di jQuery $.parseJSON(), in modo che converte automaticamente ISO e ASP.NET stringhe di data alle effettive date di JavaScript.

Io lo uso con ASP.NET MVC, e funziona come un fascino. La parte migliore è che è anche retrocompatibile. il codice esistente che utilizza $.parseJSON() funzionerà proprio come prima (e in realtà funziona lo stesso), ma se si fornisce il secondo parametro e impostare il suo valore a true, tutte le date otterrà automaticamente convertito per voi.

L'estensione utilizza browser nativo supporto JSON, se del caso e funziona anche in altri che non lo fanno. I browser moderni supportano comunque questa funzionalità.