01/10/2018, 16:47
Gửi một mảng Date từ javascript lên server (ASP.NET)
Mình có 1 mảng Date:
var Data = [];
Và add phần tử vào
function Add(){
for(var i=0;i<10;i++) Data.push(new Date());
}
Gửi đi:
$.ajax({
url:'....',
type:'post'
datatype: 'json',
data:{data:Data},
success: funtion(){
// đã success và chạy vào đây nhưng trên server không có dữ liệu
}
});
Trên server có 1 method để nhận mảng này.
Mình đã thiết kế như này nhưng không chạy. Trong data không có gì
public JsonResult ProcData(DateTime[] data){...};
public JsonResult ProcData(List<DateTime> data){...};
Nhờ các anh em chỉ giáo
Bài liên quan
thay vì dùng mảng bình thường, bạn dùng FormData để tạo dữ liệu gửi lên thử xem
Mình đã chuyển qua dùng thử FormData. Kết quả cũng không khá hơn tẹo nào @@.
Đối với những kiểu dữ liệu như int, string,… thì kiểu mảng thông thường và FormData đều hoạt động OK. Nhưng kiểu Date trong javascript và trên C# sử dụng DateTime để nhận thì hoàn toàn không hoạt động. List/Mảng nhận được hoàn toàn rỗng.
Nếu truyền dữ liệu đơn thì lại hoạt động bình thường với Date / DateTime.
Thế thì thớt dùng giải pháp tạm thời là gửi timestamp vậy?
Đành dùng tạm thế vậy
bạn dùng như thế nào v? mình nghĩ là dùng FormData gửi lên vẫn được chứ nhỉ:
Mình test như thế này với FormData:
Trên C# khai báo một class chứa dữ liệu gửi lên:
Hàm nhận:
Nếu như thay thế kiểu dữ liệu của datearray trong FormDataMode thành cái khác, ví dụ int và bên dưới append int vào datearray thì nó hoạt động bình thường.
có thể do xử lý trong C#.
bạn check ở Dev Tool xem request có gửi dữ liệu params date lên không.
Date của C# và Date của JavaScript khác nhau, 2 kiểu khác nhau nên không thể gửi được.
Có 3 cách giải quyết, đều sử dụng biểu diễn trung gian:
{ day: 25, month: 7, year: 2018, hour: 9, minute: 6, second: 9 }
Kiểu thủ công cắt nối chuỗi, hoặc timestamp như thế này thì mình làm được.
Mình đang muốn ngắn và đơn nhất có thể.
Điều lạ là nếu truyền đơn lẻ kiểu Date (js truyền thẳng object dạng Date và C# dùng DateTime để nhận) thì nó ăn hàng ngay. Nhưng mảng thì tạch.