2013-01-16 33 views
8

Tôi đang sử dụng Angular JS để lấy và đăng dữ liệu lên bộ điều khiển MVC 4 của tôi dưới dạng JSON. Tất cả các thuộc tính của tôi chuyển đổi đúng trừ DateTime/DateTime? loại. Tôi muốn có một phương pháp 'đặt nó và quên nó' để xử lý các ngày để các lớp mới và hoặc các thuộc tính được thêm vào sẽ không phải nhớ thực hiện một số chuyển đổi đặc biệt để xử lý một ngày đúng cách. Tôi đã thấy những cách tiếp cận sau đây và những bất lợi có thể xảy ra. Cách tiếp cận nào là những người ngoài kia sử dụng cho cùng một nền tảng? Có điều gì đó trong MVC4 đó là xử lý này đúng cách mà tôi có thể không có cấu hình? Bất cứ đề xuất nào cũng sẽ được đánh giá rất cao.Dữ liệu JSON js góc với mô hình MVC ràng buộc cho DateTime?

  1. Bộ mô hình tùy chỉnh. Chi tiết trong blog . Có thể vấn đề về hiệu suất.
  2. Thực hiện một số sửa đổi ở phía JS. Chi tiết trong Robert Koritnik's blog. Điều này dường như không làm việc cho js Angular, có lẽ có một thiết lập trong $ http.post cho phép điều này làm việc nhưng đối tượng của tôi có tất cả các giá trị null với cách tiếp cận này.
  3. Có một số thuộc tính bổ sung như FormattedDateTime có thể được chuyển đổi thành hành động POST. Đây không phải là 'đặt nó và quên cách tiếp cận' mặc dù nó cho phép hiển thị đúng ngày ở phía khách hàng vẫn ở định dạng '/ Date (695573315098) /'

Vui lòng xem mã sau thí dụ. C# lớp:

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 Bộ điều khiển:

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-Version: 4.0.30319 X-SourceFiles:??? = UTF-8 B YzpcdXNlcnNcbmlja1xkb2N1bWVudHNcdmlzdWFsIHN0dWRpbyAyMDEyXFByb2plY3RzXFZhbGlkYXRpb25UZXN0XEhvbWVcR2V0UGVyc29uXDE = = X- Powered by: ASP.NET Date: Wed, 16 Jan 2013 14:48:34 GMT Nội dung dài: 124

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

như bạn có thể thấy với các dữ liệu Fiddler ngày đang đến qua như một ngày JSON nhưng khi nhấn Gui cho toi thod các tài sản DateTime là không đúng và DateTime? tài sản là null.

enter image description here

+5

tôi sẽ đi với giải pháp Phil Haack của. Ngày JSON phải ở định dạng có thể đọc được JavaScript khi chúng rời khỏi máy chủ. Đó là ký hiệu đối tượng JavaScript, sau đó. –

+2

+1 trên Haack. Sử dụng JSON.NET sẽ khắc phục vấn đề về datetime cũng như định dạng tuần tự hóa ngớ ngẩn của các từ điển .NET. –

Trả lời

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