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

Asp.net 使用jquery.load将对象数组传递给MVC 3,asp.net,asp.net-mvc,asp.net-mvc-3,jquery,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Jquery,我在尝试将对象数组传递给MVC3控制器/操作时遇到问题。我在网上找到了一些讨论(包括这里的SO),但没有一个能解决我的问题。以下是我的工作内容: public class Person { public Guid TempId { get; set; } public bool ReadOnly { get; set; } [Required(ErrorMessage = "Required")] public string Name { get; set; } } 以

我在尝试将对象数组传递给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();
}
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 url=“AddPerson#peopleDiv”;
var people=[];
people.push({'[0].TempId':'',[0].ReadOnly:'true',[0].Name':'Bob Jones'});
$(“#peopleDiv”).load(url,people,updatePeopleDiv);//不
$(“#peopleDiv”).load(url,$.param(people,false),updatePeopleDiv);//娜达
$(“#peopleDiv”).load(url,$.param(people,true),updatePeopleDiv);//奈特
我还尝试修改上述内容,将people[]包装在一个对象中:
var data={arr:people}
,然后尝试以各种方式发送该对象。所有的方法(除了我通过手动编码工作的方法)都会产生以下三种结果之一:

  • 未调用控制器操作(其定义方式与我的调用方式不匹配)
  • 已调用控制器操作,但参数为null
  • 调用控制器操作,并更正数组中的对象元素数,但这些对象的实际值均未传输(因此我有一个对象数组,所有对象都具有默认值)

  • 有什么建议吗?

    只需将contentType设置为
    'application/json'
    并使用
    json.stringify()

    此外,添加/编辑/删除请求应通过POST完成

    [HttpPost]
    public ActionResult AddPerson(List<Person> people)
    {
        if (null != people)
        {
            foreach (var person in people)
            {
               Debug.WriteLine(person );
            }
         }
        return PartialView("viewname");
    }
    
    [HttpPost]
    公共行动结果AddPerson(列出人员)
    {
    如果(空!=人)
    {
    foreach(人与人之间的变量)
    {
    调试写线(人);
    }
    }
    返回PartialView(“视图名称”);
    }
    
    只需将contentType设置为
    'application/json'
    并使用
    json.stringify()

    此外,添加/编辑/删除请求应通过POST完成

    [HttpPost]
    public ActionResult AddPerson(List<Person> people)
    {
        if (null != people)
        {
            foreach (var person in people)
            {
               Debug.WriteLine(person );
            }
         }
        return PartialView("viewname");
    }
    
    [HttpPost]
    公共行动结果AddPerson(列出人员)
    {
    如果(空!=人)
    {
    foreach(人与人之间的变量)
    {
    调试写线(人);
    }
    }
    返回PartialView(“视图名称”);
    }
    
    您不希望通过查询字符串传递复杂对象。你想发布那些params.Dave-我同意,但正如我解释的(可能很糟糕),我无法让它工作,我不得不求助于通过查询字符串传递。你能给我看一个有效的例子吗?@DaveA所说的是正确的,试着在帖子中传递它。我的建议是创建一个JSON数组并将其作为字符串发布到控制器,然后在控制器中反序列化它。如果控制器动作没有被点击,那么你可能是在说它错了。例如,您的url包含一个#peopleDiv。这篇文章提供了一个很好的问题和解决方案示例…请密切注意示例中
    JSON.Stringify
    的特殊用法,因为我相信您需要它来解决问题。您不希望通过查询字符串传递复杂对象。你想发布那些params.Dave-我同意,但正如我解释的(可能很糟糕),我无法让它工作,我不得不求助于通过查询字符串传递。你能给我看一个有效的例子吗?@DaveA所说的是正确的,试着在帖子中传递它。我的建议是创建一个JSON数组并将其作为字符串发布到控制器,然后在控制器中反序列化它。如果控制器动作没有被点击,那么你可能是在说它错了。例如,您的url包含一个#peopleDiv。这篇文章提供了一个很好的问题和解决方案示例……请密切注意示例中
    JSON.Stringify
    的特殊用法,因为我相信您需要它来解决问题。
    [HttpPost]
    public ActionResult AddPerson(List<Person> people)
    {
        if (null != people)
        {
            foreach (var person in people)
            {
               Debug.WriteLine(person );
            }
         }
        return PartialView("viewname");
    }