无效的JSON原语:103,104,105。 - jqgrid - 将数组传递给控制器​​操作时

时间:2012-07-30 19:07:15

标签: jquery asp.net-mvc json jqgrid jqgrid-asp.net

我正在使用Multiselect功能选择多行并传递给控制器​​。 javascript如下:

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。

请帮我弄清楚这个问题,已经有一段时间我被困在这个问题上了。任何建议都非常感谢。

3 个答案:

答案 0 :(得分:4)

当您通过ajax调用发送数据时,您需要按照这样的方式对数据进行字符串化

$.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
        }

        }); 

$.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 } });

我希望这会有所帮助。

答案 1 :(得分:1)

我找到了问题的解决方案。不要将colData作为数组发送,而是使用Json.stringify将它们作为字符串传递给控制器​​,如下所示。

var data = Json.stringify(colData);

然后,将“数据”传递给控制器​​。控制器操作仍然应该将其作为字符串检索,并且反序列化“id”将适当地返回字符串列表。

答案 2 :(得分: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; }
}