2009-08-12 5 views

答えて

0

ブログ記事jQuery, Ajax, ASP.NET and datesをご覧ください。

ASP.NET MVCとjQueryを使用してJSONを介してサーバーとクライアントの間で日付を渡す方法について詳しく説明しています。

+0

これはいくつかの洞察を提供しますが、Json()を介してJsonResultを返すMVCコントローラではなく、ASP.NET WebサービスにjQueryを使用して処理します。私はMSFT ajaxを使ってASP.NET MVCにjQueryを興味があります。 – ChrisP

+0

問題は、主に単一の日付値ではなく日付プロパティを持つ複雑なオブジェクトにあります。 – ChrisP

+0

JSON形式は、説明した例とまったく同じです。日付プロパティまたは単一の日付値は違いはありません。 – Alex

5

誰もがそれは良い考えだと私に同意するわけではありませんが、適切な日付の代わりに書式設定された文字列を返すことが最も多いと思います。 How I handle JSON dates returned by ASP.NET AJAXを参照してください。

11

MS JSONシリアライザに縛られていない場合は、Json.NETを使用できます。シリアライズの問題を処理するためのIsoDateTimeConverterが付属しています。これは、日付をISO 8601フォーマットされた文字列にシリアル化します。

例えば、私たちのプロジェクトでは、myObjectのシリアル化は次のコードで処理されます。

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

あなたはJson.NET急落を取ることにした場合、あなたはまた、それはASP.NET MVCアプリケーションで使用することができるのActionResultを返すようJsonNetResultをつかむことをお勧めします。それは非常に使いやすいです。詳細情報については

は、以下を参照してください。Good (Date)Times with Json.NET

+0

私たちはこれを逃したのか分かりません。 – Marc

6

はそれは醜いかもしれないが、それは動作します:

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

おそらく、文字列全体を一致させる必要はなく、単に( - [0-? 9] +)で十分です...

1

Json.NETライブラリでプレイした後、JavascriptDateTimeConverterよりIsoDateTimeConverterを使用する理由がわかりました。

これは、MVCコントローラから日付をシリアル化するときに使用していたExt JSインターフェイスで使いやすくなっています。

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

私は私がして解析する日付書式を指定しなくても、日付として返された値を取得することができExt.data.JsonStoreに戻って、このデータを取得しています。

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

JSONは次のようになります返さ:あなたがする必要がない場合はISO 8601フォーマットとバックに変換する理由はありません

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

を。

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

SUBSTR関数はで「/「/日(」一部、とのparseInt関数は整数を取得し、無視)」取り出す:

+0

JavaScriptDateTimeConverterは[有効なJSONを生成しないため](http://james.newtonking.com/json/help/?topic=html/DatesInJSON.htm)です。有効なJSONを期待するより広い範囲のクライアントとの相互運用性を維持したい場合は、ISO 8601を守る方がよいでしょう。 –

29

これは、スタック オーバーフローにanother postで発見されました終わり。結果の数値はDateコンストラクタに渡されます。

+0

最も簡単なソリューションは最高です – DalSoft

1

オート(あなたはjQueryのを使用している場合)、クライアント側で日付を変換

-

あなたはそれを指定していないが、あなたはjQueryのを使用することができASP.NET MVCを使用しているからです。実際の日付に変換すると、this blog postで提供されているコードを使用すると、単純になりました。このコードは、jQueryの$.parseJSON()機能を拡張しているため、ISOとASP.NETの日付文字列を実際のJavaScript日付に自動的に変換します。

私はASP.NET MVCでそれを使用し、それは魅力的に機能します。最も重要な点は、後方互換性もあることです。 $.parseJSON()を使用する既存のコードは、前と同じように動作し(実際には同じように動作しますが)、2番目のパラメータを指定してその値をtrueに設定すると、すべての日付が自動的に変換されます。

この拡張機能は、該当する場合はネイティブブラウザのJSONサポートを使用し、そうでないものでも機能します。とにかく、現代のブラウザはこの機能をサポートしています。

関連する問題