2010-10-14 43 views
20

Tôi đang sử dụng lịch jQuery để hiển thị các sự kiện, được thiết kế để lấy dữ liệu từ máy chủ. Khi vô hiệu hóa lịch, hãy tắt yêu cầu AJAX để nhận một mảng các đối tượng sự kiện (mã hóa json). Tất cả đều tốt cho đến nay. Tuy nhiên, yêu cầu này bao gồm ngày và thời gian được mã hóa JSON (ở mức độ gian lận của tôi). Mã này trông như thế này:ASP.NET MVC - Qua JSON DateTime để điều khiển không ánh xạ tới tham số điều khiển

data: function (start, end, callback) { 
     $.post('/planner/GetPlannerEvents', { test: "test", start: JSON.stringify(start), end: JSON.stringify(end) }, function (result) { callback(result); }); 
    } 

Việc kê khai đối với phương pháp điều khiển GetPlannerEvents trông như thế này:

public ActionResult GetPlannerEvents(DateTime start, DateTime end) 

Vấn đề là asp.net MVC 2 dường như không thể tự động phân tích json mã hóa datetime và như vậy phàn nàn rằng các giá trị bắt đầu và kết thúc là null.

Có phương pháp nào khác mà tôi nên sử dụng để chuyển ngày javascript đến máy chủ để chúng có thể được phân tích cú pháp chính xác không?

Cảm ơn,

+0

Có lý do nào bạn đang sử dụng JSON.stringify không? Các giá trị trước cuộc gọi đó là gì? – Jab

+0

ngày javascript thông thường. Tôi nghĩ bản demo tôi đang xem JSON.stringify đã sử dụng, nhưng thực sự tôi cho rằng không có lý do thực sự nào để sử dụng nó. – Sergio

Trả lời

48

Bạn không nên JSON mã hóa ngày với stringify vì trình kết nối mô hình mặc định không mong đợi JSON. Hãy thử điều này:

$.post('/planner/GetPlannerEvents', { start: start.toUTCString(), 
    end: end.toUTCString() }, function (result) { 
    callback(result); 
}); 
+1

Một lần nữa Darin, bạn làm cho ngày của tôi! – Samuel

+1

Có thể đáng chú ý là bộ điều khiển mong đợi một tham số chuỗi và không phải là một DateTime. –

+0

Tôi muốn câu trả lời này có nhiều phiếu bầu hơn. Kinda khó để đào trong đống ngày đi qua để câu hỏi điều khiển MVC. Không thể tin rằng toUTCString() là câu trả lời. Đạo cụ! – tranceporter

-5

Bạn cần phải sử dụng kiểu trả về như 1JsonResult1s thay vì 1ActionResult1s

mã của bạn đi somthing như thế này

public JasonResult(DateTime start, DateTime end) { 
    //some logic 
    return Json(); // you can pass any values within Json() with new keyword 
} 
+2

cảm ơn, nhưng một kết quả json là một actionresult – Sergio

7

Hãy thử sử dụng date.toISOString() để chuyển dữ liệu đến máy chủ. Nó trả về chuỗi theo định dạng ISO8601. Ngoài ra phương pháp này có thể được sử dụng để định dạng ngày để sử dụng trong uri.

$.post('/planner/GetPlannerEvents', { start: start.toISOString(), 
    end: end.toISOString() }, function (result) { 
    callback(result); 
}); 

Tại sao toISOString tốt hơn toUTCString?
toUTCString chuyển đổi thành chuỗi có thể đọc được của con người trong múi giờ UTC.
toISOString chuyển thành định dạng ISO phổ dụng cho phép giải quyết vấn đề với cài đặt vùng và các định dạng khác nhau.

+0

Hoàn toàn đồng ý rằng ISO đáng tin cậy hơn và nhất quán hơn UTC trên các máy khác nhau với các cài đặt bản địa hóa khác nhau. – MazBros

0

Các biến thể của date.toString không hoạt động đối với tôi cho đến khi tôi thêm tiêu đề json vào bài đăng. Mã kết quả như sau:

var pstData = { 
    begDate: date1.toUTCString(), 
    endDate : date2.toUTCString() 
}; 

$.ajax({ 
    url:'url', 
    type:'POST', 
    data: JSON.stringify(pstData), 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
}) 
Các vấn đề liên quan