2011-08-19 36 views
7

Tôi đang cố gắng và đấu tranh để gửi một mảng qua JSON tới một hành động điều khiển MVC.Gửi mảng tới bộ điều khiển MVC qua JSON?

Dưới đây là những gì tôi có và những gì tôi đã cố gắng ...

//Get checked records 
var $checkedRecords = $(':checked'); //e.g. 3 rows selected = [input 4, input 5, input 6] 

//Have tried following: 
sendingVar: $checkedRecords.serializeArray(); // gives array of 0's 
sendingVar: JSON.stringify($checkedRecords); // gives "{\"length\":1,\"prevObject\":{\"0\":{\"jQuery1313717591466\":1,\"jQuery1313717591653\":13},\"context\":{\"jQuery1313717591466\":1,\"jQuery1313717591653\":13},\"length\":1},\"context\":{\"jQuery1313717591466\":1,\"jQuery1313717591653\":13},\"selector\":\":checked\",\"0\":{}}"...wtf 

//Post 
$.post(url, { sendingVar: sendingVar }, function(data) {alert(data); }); 

Làm thế nào để làm điều đó?

chỉnh sửa: đối với những người đề xuất gửi $checkedRecords "bằng" từ dòng trên cùng - điều đó không hoạt động. Tôi nhận được một ngoại lệ kỳ lạ ở đâu đó trong khuôn khổ jquery :(

uncaught exception: [Exception... "Could not convert JavaScript argument" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: "JS frame :: http://.../.../.../jquery-1.4.4.min.js :: <TOP_LEVEL> :: line 141" data: no] 

mà tôi nghĩ có nghĩa là nó đang cố gắng gán null để một cái gì đó nó không thể

Edit:. Tôi đang sử dụng MVC2 không 3

Edit2: Sau @ answer- vấn đề thứ hai là do làm thế nào tôi đã xây dựng các mảng như[input 4, input 5, input 6] và không [4,5,6] - bất kỳ ý tưởng làm thế nào tôi chỉ có thể nhận được các giá trị trong mảng thay vì

Edit3: Dừng bỏ phiếu trùng lặp khi không. Bạn có thực sự đọc vấn đề của tôi hoặc đọc các vấn đề được liên kết không? đây là một vấn đề khác nhau

@Daveo:

I don't want to build in an overriding custom attribute just to send an array from JSON, that is rediculous như chúng tôi đã đề cập trong câu hỏi này, nó không phải là cần thiết.

MVC3 - irrelevant

+1

thể trùng lặp của: http://stackoverflow.com/questions/320291/how-to-post-an-array- các đối tượng phức tạp-với-json-jquery-to-asp-net-mvc-controll và http://stackoverflow.com/questions/4789481/post-an-array-of-objects-via-json-to- asp-net-mvc3 – Daveo

+0

Kết quả mong muốn của bạn là gì? Mảng của bạn là các đối tượng jQuery, phiên bản xâu chuỗi trông phù hợp với tôi. Bạn mong đợi nó trông như thế nào? – BZink

+0

nó chỉ là một mảng chứa chuỗi ID của các mục được chọn. Tôi muốn checkedRecords chứa một mảng của tất cả các ID của các mục được chọn. Giá trị 'của giá trị đầu vào đã chọn chứa giá trị ID mà tôi cần. – baron

Trả lời

22

Dưới đây là bản demo của tôi, sử dụng mvc2, hy vọng một số giúp ~

Chìa khóa để thành công là traditional

thiết lập các tham số traditional true

$(function(){ 
    var a = [1, 2]; 
    $.ajax({ 
     type: "POST", 
     url: "<%= ResolveUrl("~/Home/PostArray/") %>", 
     data: {orderedIds: a}, 
     dataType: "json", 
     traditional: true, 
     success: function(msg){alert(msg)} 
    }); 
}) 

Kể từ jquery 1.4 tham số này tồn tại vì cơ chế tuần tự hóa các đối tượng thành các tham số truy vấn đã thay đổi.

và hành động là ~

[HttpPost] 
public ActionResult PostArray(int[] orderedIds) 
{ 
    return Content(orderedIds.Length.ToString()); 
} 
+0

Thật không may, điều này không hoạt động. 'orderIds' là null trong phương thức điều khiển. Tôi nghi ngờ vì ajax thực sự làm một 'GET'? – baron

+1

@baron - Ở vị trí của tôi, nó hoạt động tốt. 'orderIds' là tên thông số – Monday

+1

Xin lỗi, bạn đã sửa mã này không hoạt động. Vì vậy, vấn đề nằm ở cách tôi nhận được mảng của Id được kiểm tra với 'var $ checkedRecords = $ (': checked');' cung cấp cho tôi '[input 3, input 4, input 5]' nơi tôi thực sự cần: ' [1, 2] '. Cảm ơn bạn – baron

0

bạn cũng có thể sử dụng JSON.stringyfy để gửi dữ liệu như là một chuỗi sau đó sử dụng JavaScriptSerializer class để truy xuất dữ liệu.

Trong code C#, để có được các dữ liệu, sẽ giống như thế này:

JavaScriptSerializer js = new JavaScriptSerializer(); 

js.Deserialize<T>(string paramiter); 
Các vấn đề liên quan