asp.net - 使用 jquery.load 将对象数组传递给 MVC 3

标签 asp.net asp.net-mvc asp.net-mvc-3 jquery

我在尝试将对象数组传递给 MVC3 Controller /操作时遇到了问题。我在网上找到了一些讨论(包括这里的SO),但没有一个能解决我的问题。这是我正在处理的内容:

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

这是我的 Controller 操作(目前,我已经尝试了很多变体):

[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=falsepeople[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

我还尝试通过将 people[] 包装在对象内来修改上述内容: var data = { arr: people } 然后尝试发送该 data 对象各种方式。所有方法(除了我通过手动编码来工作的方法)都会导致以下三种结果之一:

  1. 未调用任何 Controller 操作(其定义方式与我的调用方式不匹配)
  2. 调用了 Controller 操作,但参数为空
  3. 调用了 Controller 操作,并且数组中的对象元素数量正确,但没有传输这些对象的任何实际值(因此我有一个全部具有默认值的对象数组)。

有什么建议吗?

最佳答案

只需将 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");
}

关于asp.net - 使用 jquery.load 将对象数组传递给 MVC 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15690272/

相关文章:

javascript - 提交按钮上弹出 Html 确认弹出窗口

asp.net-mvc - 当内容包含 PageControl 或 TabControl 时,DevExpress CallbackPanel PerformCallback 挂起

asp.net-mvc-3 - ASP.NET MVC 3 中 ModelState.IsValid 的限制

asp.net - ninject,在ninject初始化的RegisterServices中注入(inject)Membership.Provider

Asp.net request.querystring

c# - 从代码隐藏的 ASP.net 中的 <li> 标记中删除 CSS 类

c# - 使用 Oledbconnection 时出现编译错误

.net - MVC3 模型 DisplayFormat 和 JSON

jquery - 从数据库与文件系统中检索静态数据

asp.net-mvc-3 - Razor 引用文档