2009-08-12 29 views

Trả lời

0

Hãy xem bài đăng trên blog jQuery, Ajax, ASP.NET and dates.

Chi tiết cách làm việc với ASP.NET MVC và jQuery để chuyển ngày qua JSON giữa máy chủ và phía máy khách.

+0

Điều này cung cấp một số thông tin chi tiết, nhưng giao dịch w/jQuery với dịch vụ web ASP.NET thay vì bộ điều khiển MVC trả về JsonResult qua Json(). Tôi quan tâm đến jQuery để ASP.NET MVC w/o MSFT ajax. – ChrisP

+0

Vấn đề chủ yếu là các đối tượng phức tạp có thuộc tính ngày tháng chứ không phải là một giá trị ngày tháng. – ChrisP

+0

Định dạng JSON giống hệt với ví dụ bạn mô tả. Ngày Tài sản hoặc Giá trị Ngày Đơn không tạo sự khác biệt. – Alex

11

Nếu bạn không liên kết với bộ nối tiếp MS JSON, bạn có thể sử dụng Json.NET. Nó đi kèm với một IsoDateTimeConverter để xử lý các vấn đề với ngày serializing. Điều này sẽ tuần tự hóa ngày thành một chuỗi được định dạng ISO 8601.

Ví dụ: trong việc nối tiếp dự án myObject của chúng tôi được xử lý thông qua mã sau.

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

Nếu bạn quyết định để có những Json.NET chìm bạn cũng sẽ muốn lấy JsonNetResult vì nó trả về một ActionResult có thể được sử dụng trong ứng dụng ASP.NET MVC. Nó khá dễ sử dụng.

Để biết thêm thông xem: Good (Date)Times with Json.NET

+0

Không biết làm thế nào chúng ta bỏ lỡ điều này, nhờ – Marc

6

Nó có thể là xấu xí, nhưng nó hoạt động:

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

Có lẽ, nó không phải là cần thiết để phù hợp với toàn bộ chuỗi, và chỉ (- [0-? 9] +) là đủ ...

1

Sau khi chơi với thư viện Json.NET, tôi tự hỏi tại sao bạn sẽ chọn sử dụng IsoDateTimeConverter qua JavascriptDateTimeConverter.

Tôi thấy điều này dễ sử dụng hơn với giao diện Ext JS mà tôi đang sử dụng khi sắp xếp ngày tháng từ Bộ điều khiển MVC.

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

Tôi nhận được dữ liệu này trở lại vào Ext.data.JsonStore, có thể lấy giá trị trả về làm ngày mà không cần phải chỉ định định dạng ngày để phân tích cú pháp.

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

Các JSON trở lại trông như thế này:

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

Không có lý do nào để chuyển đổi sang định dạng ISO 8601 và trở lại nếu bạn không phải.

+0

Bởi vì 'JavaScriptDateTimeConverter' [không tạo ra JSON hợp lệ] (http://james.newtonking.com/json/help/?topic=html/DatesInJSON.htm). Nếu bạn muốn duy trì khả năng tương tác với một phạm vi rộng hơn của các khách hàng mong đợi JSON hợp lệ, thì bạn nên tốt hơn khi gắn bó với ISO 8601. –

29

này được tìm thấy trong another post trên Stack   Overflow:

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

Chức năng substr sẽ đưa ra các "/ ngày (" một phần, và các chức năng parseInt được các số nguyên và bỏ qua ") /" ở kết thúc. Số kết quả được chuyển vào hàm tạo ngày.

+0

Giải pháp đơn giản là tốt nhất – DalSoft

1

Auto chuyển đổi ngày trên các mặt hàng (nếu bạn sử dụng jQuery)

-

Bạn không nói rõ điều đó, nhưng kể từ khi bạn đang sử dụng ASP.NET MVC bạn có thể sử dụng jQuery. Nếu bạn làm như vậy, việc chuyển đổi sang ngày thực tế trở nên đơn giản hơn nếu bạn sử dụng mã được cung cấp trên this blog post. Mã này mở rộng chức năng của $.parseJSON() của jQuery, vì vậy nó tự động chuyển đổi chuỗi ngày ISO và ASP.NET thành các ngày JavaScript thực tế.

Tôi sử dụng nó với ASP.NET MVC, và nó hoạt động như một nét duyên dáng. Phần tốt nhất là nó cũng tương thích ngược. Mã hiện tại sử dụng $.parseJSON() sẽ hoạt động giống như trước đây (và thực sự hoạt động tương tự), nhưng nếu bạn cung cấp thông số thứ hai và đặt giá trị của nó thành true, tất cả các ngày sẽ tự động được chuyển đổi cho bạn.

Tiện ích mở rộng sử dụng hỗ trợ JSON trình duyệt gốc khi áp dụng và cũng hoạt động ở những người khác không hỗ trợ. Các trình duyệt hiện đại hỗ trợ chức năng này.

Các vấn đề liên quan