我遇到了试图对象的数组传递给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
对象的各种方式。 所有的方式导致三种结果一个(比我有手动编码工作等):
- 没有所谓的控制器动作(间它如何定义和不匹配如何我把它叫做)
- 所谓的控制器动作,但param为空
- 从这些对象被称为控制器的动作,和在阵列中对象元素的正确数目,但没有实际值被转移(所以我有对象的阵列中的所有用默认值)。
有什么建议?