2014-01-29 56 views
0

我正在使用下面的东西来发布对象的列表控制器ajax后方法。如何发布json对象数组到控制器方法

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":""}] 

尝试通过creati ng相同的对象并传递给控制器​​参数,但不起作用。

+0

那么,什么是你的问题是什么呢?任何错误消息在萤火虫?给你的控制器代码 –

+0

无法调用控制器方法 - 'fin(object s)'。请告诉我,我必须将argumnet而不是'object'类型更改为任何其他类型来存放json数组? – dsi

回答

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({ 
    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!!'); 
    } 
}); 
+0

NOt工作。看起来像我的控制器方法应该有不同的参数类型,而不是“对象s”..我应该保持什么json数组? – dsi

+0

我编辑了我的帖子来提出一个数据结构,让我知道它是否工作。 –

+0

通过创建发布到控制器的相同对象进行尝试,但它不起作用。请建议如何解决。 – dsi

0

不要知道这是否会解决这个问题的另一种方式,但在你的Ajax设置试加传统: true 并删除JSON.stringify。

当通过阵列控制器,我发现我需要使用传统的设置为true

$.ajax({ 
    url: '/ControllerName/fin', 
    type: "POST", 
    contentType: "application/json", 
    data: s: data, 
    traditional:true, 
    success: function() { 
     console.log('success!!'); 
    } 
}); 
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} 
} 
相关问题