【问题标题】:How can i pass an array of objects from javascript to asp.net-mvc function through ajax?如何通过 ajax 将对象数组从 javascript 传递到 asp.net-mvc 函数?
【发布时间】:2014-03-13 06:55:08
【问题描述】:

我有以下构建对象数组的 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;}
}

【问题讨论】:

  • 您在“/MyController/UpdateMe”周围缺少引号?此外,“Controller”似乎拼写错误。
  • @linstantnoodles - 抱歉,这只是问题中的错字。更新

标签: javascript ajax arrays asp.net-mvc post


【解决方案1】:

默认情况下jQuery.ajax contentType 是application/x-www-form-urlencoded。这意味着在 url 字符串中发送的参数。在您的情况下,您的数组转换为字符串:object&amp;object&amp;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");
   }
});

调试中的操作:

【讨论】:

  • 注意:“UpdateMe”动作也必须用[HttpPost]标记。
  • 不一定。 action 上的属性只影响过滤请求方法,即如果添加HttpPost 属性,那么action 将只接受post 请求,如果action 没有http 属性,它将接受所有请求方法。
  • @Alexander - 这几乎对我有用。我现在看到服务器上填充了 info 数组,但是当我查看数组时,每个项目都填充了 statusId,但里面的 rows 数组已经为空(请参阅更新的问题)
  • @leora,我想你忘了在UpdateInfo 类中添加rows 属性。
  • @Alexander - 我更新了问题以反映最新的代码
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-01-06
    • 2014-09-27
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    相关资源
    最近更新 更多