如何将json对象的数组发布到控制器方法

时间:2014-01-29 14:54:09

标签: jquery ajax asp.net-mvc json

我正在使用下面的东西将对象列表发布到控制器ajax post方法。

jQuery东西:

var values = [];
values.push(rowData1);
values.push(rowData2);
values.push(rowData3);

var data = JSON.stringify({
    installationControls: values
});

$.ajax({
    url: '/ControllerName/fin',
    type: "POST",
    contentType: "application/json",
    data: {
        data: data
    },
    success: function () {
        console.log('success!!');
    }
});

请告诉我有什么问题。

控制器方法:

[HttpPost]
public JsonResult fin(object s) {
    //.................
}

发布的数据如下:

         installationControls":[{"syID":"1789","FullName":"Bejin Mara","Min":"5","MSG":""},{"syStudentID":"46","FullName":"Calderon Laura","MinAbsent":"7","MSG":""},{"syID":"17","FullName":"mic Mayra","Min":"5","MSG":""}]

尝试创建相同的对象并传递给控制器​​参数但没有工作。

4 个答案:

答案 0 :(得分:0)

您的ajax设置似乎正确无误。但是,由于端点期望和对象名为's',我更改了data: - 位以反映这一点:

    $.ajax({
        url: '/ControllerName/fin',
        type: "POST",
        contentType: "application/json",
        data: { s: data },
        success: function () {
            console.log('success!!');
        }
    });

这有帮助吗?

编辑:控制器可以接受如下数据结构:

public class SingleListObject
{
    // Add properties to this class to match the properties held by rowData
}

public class MyModelWithList
{
    public List<SingleListObject> MyList { get; set; }

    public MyModelWithList()
    {
        MyList = new List<SingleListObject>();
    }
}

public JsonResult fin(MyModelWithList details) {
    //.................
}

的Ajax:

$.ajax({
    url: '/ControllerName/fin',
    type: "POST",
    contentType: "application/json",
    data: JSON.stringify({ myList: values }), // If this doesn't work, try JSON.stringify({ details: { myList: values } })
    success: function () {
        console.log('success!!');
    }
});

答案 1 :(得分:0)

您可以使用与视图关联的ViewModel数据结构,以便运行时能够解析请求中的对象。

还有另一种方法可以绑定除默认ViewModel对象之外的对象/复杂类型,您可以在此处跟踪Sending complex JSON objects to Asp.net MVC using jQuery Ajax.

答案 2 :(得分:0)

不确定这是否可以解决问题,但在您的ajax设置中尝试添加traditional:true 并删除JSON.stringify。

将数组传递给控制器​​时,我发现需要使用传统的设置为true

$.ajax({
    url: '/ControllerName/fin',
    type: "POST",
    contentType: "application/json",
    data: s: data,
    traditional:true,
    success: function () {
        console.log('success!!');
    }
});

答案 3 :(得分:0)

将您的JavaScript更改为:

var values = [];
values.push(rowData1);
values.push(rowData2);
values.push(rowData3);

var postedData = JSON.stringify({
    installationControls: values
});

$.ajax({
    url: '/ControllerName/fin',
    type: "POST",
    contentType: "application/json",
    data: postedData,
    success: function () {
        console.log('success!!');
    }
});

在控制器中,将控制器更改为:

[HttpPost] public JsonResult fin(List installationControls){     // ................. }

其中InstallationControl是一个与发布值具有相同属性的类,在这种情况下,它应具有以下属性:

public class InstallationControl
{
   public string syID{get;set}
   public string FullName{get;set}
   public string Min{get;set}
   public string MSG{get;set}
}