【问题标题】:How do you pass an array of JSON objects to an MVC controller?如何将 JSON 对象数组传递给 MVC 控制器?
【发布时间】:2012-10-01 11:47:28
【问题描述】:

我正在对控制器进行 ajax 调用,我可以将单个项目传递给控制器​​,但不能传递项目列表。基本上,这是可行的:

$.ajax(
{
    url: "Inventory/Update",
    data: { ItemID: "1234", Quantity: 7 },
    datatype: "json"
});


public void Update(Item item)
{

}

该项目在控制器中填充为 1234 和 7。但是当我尝试这个时:

$.ajax(
{
    url: "Inventory/Update",
    data: [{ ItemID: "1234", Quantity: 7 }],
    datatype: "json"
});


public void Update(List<Item> items)
{

}

items 为空。

我已经尝试将传统设置为 true,正如其他帖子中所建议的那样,但这并没有什么不同。

如何将这个对象数组传递给我的 MVC 控制器?

【问题讨论】:

  • 你对javascript、json数组感到满意吗?
  • 这似乎是正确的。您是使用 Firebug 还是在后端检查帖子数据?
  • @harry - 不知道你在问什么。
  • @JackalopeZero - 我正在通过调试器检查控制器中的值。

标签: javascript ajax asp.net-mvc json


【解决方案1】:

将数组作为FORM 元素的一部分发布

当生成具有任意数量的某些元素(将成为同一数组的一部分)的FORM 时并不那么复杂。您所要做的就是处理连续的索引和正确的输入名称。

请阅读我的detailed blog post 关于这个主题。

发布不属于FORM 的复杂 JSON 对象

我写了一个jQuery plugin,它可以接受任何复杂的 JSON 对象并将其转换,以便轻松地发送回服务器并由 Asp.net MVC 正确解析。它不只是转换对象,它还负责处理日期,以便在服务器上正确解析它们而不会出现任何问题。

【讨论】:

    【解决方案2】:

    不确定 ajax post,但在表单提交的情况下,应该呈现这样的控件

     <ul>
    <% int i = 0; foreach (Student s in (IEnumerable)this.Model)
       {%>
    <li>
        <%=Html.TextBox("student[" + i + "].Email")%>
        <%=Html.TextBox("student[" + i + "].Name")%>
    </li>
    <%i++;
       } %>
    

    你需要设置一个 iterator 使它成为列表形式,上面的控件会产生类似名字的控件

    学生[0].电子邮件, 学生[0].姓名

    学生[1].电子邮件, 学生[1].姓名

    学生[2].电子邮件, 学生[2].姓名

    等等

    在控制器端

    List<Student> modal 
    

    将获取所有发布的数据。

    在你的 ajax 帖子中尝试一些相同的东西,希望对你有所帮助

    【讨论】:

      【解决方案3】:

      这可能看起来很奇怪,但您可以尝试在数据字典中添加引号,例如:

      $.ajax(
      {
          "url": "Inventory/Update",
          "data": [{ "ItemID": "1234", "Quantity":"7" }],
          "datatype": "json"
      });
      

      【讨论】:

        【解决方案4】:

        尝试改用这个:

           var itemArray = new Array();
           itemArray[0] = { ItemID: "1234", Quantity: 7 };
           var postData = { items: itemArray };
           $.ajax(
           {
               url: "Inventory/Update",
               data: postData,
               datatype: "json"
           });
        

        【讨论】:

          【解决方案5】:

          你应该将 contentType 添加到 ajax 函数中

          $.ajax(
          {
             url: "Inventory/Update",
             type:"post",
             contentType:"application/json",
             data: postData,
             datatype: "json"
          });
          

          【讨论】:

            猜你喜欢
            • 2011-09-05
            • 1970-01-01
            • 1970-01-01
            • 2021-03-01
            • 2019-06-23
            • 2014-03-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多