Chr*_*ris 2 asp.net asp.net-mvc jquery asp.net-mvc-3
我在尝试将对象数组传递给 MVC3 控制器/操作时遇到了问题。我在网上找到了一些讨论(包括这里的SO),但没有一个能解决我的问题。这是我正在处理的内容:
public class Person
{
public Guid TempId { get; set; }
public bool ReadOnly { get; set; }
[Required(ErrorMessage = "Required")]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的控制器操作(目前,我已经尝试了很多变体)的样子:
[HttpGet]
public ActionResult AddPerson(List<Person> people)
{
if (null != people)
{
foreach (var person in people)
{
Debug.WriteLine(person );
}
}
return View();
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了多种构建 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);
Run Code Online (Sandbox Code Playgroud)
这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
Run Code Online (Sandbox Code Playgroud)
我还尝试通过将 people[] 包装在对象内来修改上述内容:var data = { arr: people }然后尝试data以各种方式发送该对象。所有方法(除了我通过手动编码进行工作的方法)都会导致以下三种结果之一:
有什么建议么?
只需将 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();
}
});
Run Code Online (Sandbox Code Playgroud)
此外,添加/编辑/删除请求应通过 POST 完成。
[HttpPost]
public ActionResult AddPerson(List<Person> people)
{
if (null != people)
{
foreach (var person in people)
{
Debug.WriteLine(person );
}
}
return PartialView("viewname");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3575 次 |
| 最近记录: |