2012-07-30 15 views
0

我正在使用多選功能來選擇多行並傳遞給控制器​​。 JavaScript的低於:無效的JSON基元:103,104,105。 - jqgrid - 傳遞數組到控制器動作

onClickButton: function (ids) { 

var grid = $("#employee"); 
var rowid = grid.jqGrid('getGridParam', 'selarrrow'); 

var count = rowid.length; 
var rowData; 
var colData = []; 

for (var i = 0; i < count; i++) { 
    rowData = $("#employee").getRowData(rowid[i]); 
    colData[i] = rowData.ID; 
          } 

$.ajax({ 
    type: 'POST', 
    url: '/Home/Create/' + colData, 
    //data: { id: colData }, 
    dataType: "json" 
    }); 
} 

我控制器操作低於:

public ActionResult Create(string id){ 
JavaScriptSerializer ser = new JavaScriptSerializer(); 
var myList = ser.Deserialize<List<string>>(id);} 

我創建colData作爲一個數組,目前加入四個ID(又稱爲「102,103,104,105」)。當我調試並查看colData時,它包含「102,103,104,105」。然後,我將它作爲字符串傳遞給控制器​​操作,然後將其反序列化。當我反序列化它時,它會抱怨爲「無效的JSON基元:103,104,105」。

我看過其他帖子,但找不到與我的問題相關的任何內容。當我使用「data:{id:colData}」傳遞colData時,id返回爲null。

請幫我解決這個問題,這是一段時間,我堅持這一個。任何建議不勝感激。

+0

向我們展示JSON? – 2012-07-30 19:09:12

+0

我將colData傳遞給控制器​​,它包含值爲字符串「102,103,104,105」。回到控制器操作中,id被檢索爲相同。我曾嘗試在控制器操作中檢索List ,但它以空值返回,因此以字符串形式檢索並試圖反序列化該id,然後拋出錯誤。 – inspiringmyself 2012-07-30 19:19:59

回答

4

當您通過Ajax調用發送你的數據,你需要stringyfy這樣

$.ajax({ 
     type: 'POST', 
     url: '@Url.Action("AddMe")', 
     contentType: 'application/json; charset=utf-8', 
     data:JSON.stringify({Id: colData}), 
     dataType: "json", 
success:function(){ 
     //do sth here 
     } 

     error: function() { 
//do sth here 
     } 

     }); 

我希望這可以幫助您的數據。

0

我會嘗試使用以下格式的jsonstring。

var jsonstring = {idarray:[{"value":"102"},{"value":"103"}]} 

代碼隱藏:

public class Idarray 
{ 
    public string value { get; set; } 
} 

public class RootObject 
{ 
    public List<Idarray> idarray { get; set; } 
} 
1

我想通了該問題的解決方案。不要將colData作爲數組發送,請使用Json.stringify將它們作爲字符串傳遞給控制器​​,如下所示。

var data = Json.stringify(colData);

然後,將「數據」傳遞給控制器​​。控制器操作仍然應該將其作爲字符串檢索,並且反序列化「id」會正確返回字符串列表。