通过使用jquery.load对象的数组到MVC 3(Pass an array of object

2019-08-18 04:08发布

我遇到了试图对象的数组传递给MVC3控制器/行动的问题。 我发现在网络上多次讨论(包括在这里SO)但都没有解决我的问题。 以下是我的工作:

public class Person
{
   public Guid TempId { get; set; }
   public bool ReadOnly { get; set; }
   [Required(ErrorMessage = "Required")]
   public string Name { get; set; }
}

以下是我的控制器操作(目前,我已经尝试了许多变化)是这样的:

[HttpGet]
public ActionResult AddPerson(List<Person> people)
{
    if (null != people)
    {
        foreach (var person in people)
        {
           Debug.WriteLine(person );
        }
     }
    return View();
}

我曾尝试构建我的jQuery为了呼吁采取行动的许多方面,但至今唯一一个我可以去工作,如果我对象的数组手动编码为URL字符串,如下所示:

var url = "AddPerson?people%5B0%5D.TempId=9FBC6EF8-67DB-4AB4-8FCE-5DFC0F2A69F9&people%5B0%5D.ReadOnly=true&people%5B0%5D.Name=Bob+Jones&people%5B1%5D.TempId=9FBC6EF8-67DB-4AB4-8FCE-5DFC0F2A6333&people%5B1%5D.ReadOnly=false&people%5B1%5D.Name=Mary+Jones #peopleDiv";
$("#peopleDiv").load(url, updatePeopleDiv);

people%5B1%5D.ReadOnly=false是的编码版本people[1].ReadOnly=false

我尝试过其他的东西,如:

var url = "AddPerson #peopleDiv";
var people = [];
people.push({'[0].TempId': '<valid guid>', '[0].ReadOnly': true, '[0].Name': 'Bob Jones' });
$("#peopleDiv").load(url, people, updatePeopleDiv); // nope
$("#peopleDiv").load(url, $.param(people, false), updatePeopleDiv); // nada
$("#peopleDiv").load(url, $.param(people, true), updatePeopleDiv); // nyet

我还试图通过包装,人们[]对象内部修改上述: var data = { arr: people } ,然后尝试发送该data对象的各种方式。 所有的方式导致三种结果一个(比我有手动编码工作等):

  1. 没有所谓的控制器动作(间它如何定义和不匹配如何我把它叫做)
  2. 所谓的控制器动作,但param为空
  3. 从这些对象被称为控制器的动作,和在阵列中对象元素的正确数目,但没有实际值被转移(所以我有对象的阵列中的所有用默认值)。

有什么建议?

Answer 1:

刚刚成立的contentType到'application/json'并使用JSON.stringify()

$.ajax({
            contentType: 'application/json',
            type: 'POST',
            url: '/Controller/AddPerson',
            data: JSON.stringify({
                people: [
                    {
                      ReadOnly: false,
                      Name: 'Cristi'
                    },
                    {
                      ReadOnly: true,
                      Name: 'Matt'
                    }
                ]
            }),
            success: function (data) {
                $("#peopleDiv").html(data);
            },
            error: function () {
                console.trace();
            }
        });

此外,添加/修改/删除请求应通过POST来完成。

[HttpPost]
public ActionResult AddPerson(List<Person> people)
{
    if (null != people)
    {
        foreach (var person in people)
        {
           Debug.WriteLine(person );
        }
     }
    return PartialView("viewname");
}


文章来源: Pass an array of objects using jquery.load to MVC 3