如何通过ajax将对象数组从javascript传递到asp.net-mvc函数?

如何通过ajax将对象数组从javascript传递到asp.net-mvc函数?,javascript,ajax,arrays,asp.net-mvc,post,Javascript,Ajax,Arrays,Asp.net Mvc,Post,我有下面的javascript代码来构建一个对象数组,我正试图通过一篇ajax文章将其推送到asp.net-mvc操作中。我正在试图找出下面这个的问题是什么 javascript: var arr = []; for (var i = 0; i < 5; i++) { var obj = { statusId: i, resizeable: true, rows: [1, 2, 3, 4, 5] }; arr

我有下面的javascript代码来构建一个对象数组,我正试图通过一篇ajax文章将其推送到asp.net-mvc操作中。我正在试图找出下面这个的问题是什么

javascript:

var arr = [];
for (var i = 0; i < 5; i++) {
     var obj = {
        statusId: i,
        resizeable: true,
        rows: [1, 2, 3, 4, 5]
      };
      arr.push(obj);
}

$.ajax({
   type: 'POST',
   traditional: true,
   url: '/MyController/UpdateMe',
   data { info: arr },
   success: function () {  
       alert("complete");
   }
});
var arr=[];
对于(变量i=0;i<5;i++){
var obj={
身份证:我,
可调整大小:正确,
行:[1,2,3,4,5]
};
方位推力(obj);
}
$.ajax({
键入:“POST”,
传统的:是的,
url:“/MyController/UpdateMe”,
数据{info:arr},
成功:函数(){
警报(“完成”);
}
});
C#asp.net-mvc操作:

public ActionResult UpdateMe(IEnumerable<UpdateInfo> info)
{
     foreach (var item in info)
     {
          Console.Write(item.statusIs + " has + " item.rows.length() + " items ");
     }
}

public class UpdateInfo
{
    public int statusId {get;set;}
    public bool resizable {get;set;}
    public List<int> rows {get;set;}
}
public ActionResult UpdateMe(IEnumerable info)
{
foreach(信息中的变量项)
{
Write(item.statusIs+“has+”item.rows.length()+“items”);
}
}
公共类更新信息
{
public int statusId{get;set;}
公共布尔可调整大小{get;set;}
公共列表行{get;set;}
}

您不能在POST请求中将JS数组作为参数传递。必须将其转换为字符串才能将其传递给.NET操作。考虑使用<代码> jQuery .PARAMM()/<代码>来执行此操作。它将对象转换为字符串,如
statusId=valueOfI&resizeable=true
。然后在操作中收到它后,将其从字符串更改回数组(我不能建议使用函数,因为我不知道.NET)。

默认情况下
jQuery.ajax
contentType是
application/x-www-form-urlencoded
。这意味着在url字符串中发送参数。在您的例子中,数组被转换为字符串:
object&object&object….

要更改此行为,应将
jQuery.ajax
中的contentType更改为
application/json
,并使用
json.stringify将js对象转换为json:

$.ajax({
   type: 'POST',
   traditional: true,
   contentType: 'application/json',
   url: '/SchoolDetails/UpdateMe',
   data: JSON.stringify({ info: arr }),
   success: function () {  
      alert("complete");
   }
});
调试中的操作:


您在“/mycontroller/UpdateMe”中缺少引号?另外,“Controller”似乎拼错了。@linstantnoodles-对不起,这只是问题中的一个拼写错误。updatedNote:“UpdateMe”操作也必须标记为
[HttpPost]
。不一定。操作上的属性仅影响筛选请求方法,即如果添加了
HttpPost
属性,则操作将仅接受post请求,如果操作没有http属性,则将接受所有请求方法。@Alexander-这几乎适用于我。我现在看到服务器上正在填充info数组,但当我查看数组时,每个项目都填充了statusId,但其中的行数组已经为空(请参见更新的问题)@leora,我想您忘记在
UpdateInfo
类中添加
rows
属性了。@Alexander-我更新了问题以反映最新的代码