我正在使用下面的东西将对象列表发布到控制器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":""}]
尝试创建相同的对象并传递给控制器参数但没有工作。
答案 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}
}