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

时间:2014-02-14 03:45:20

标签: 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.push(obj);
}

$.ajax({
   type: 'POST',
   traditional: true,
   url: '/MyController/UpdateMe',
   data { info: arr },
   success: function () {  
       alert("complete");
   }
});

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;}
}

2 个答案:

答案 0 :(得分:3)

默认情况下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");
   }
});

调试中的操作:

enter image description here

答案 1 :(得分:0)

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