Javascript 使用查询将对象数组发布到asp.net-mvc控制器操作的正确方法是什么?

Javascript 使用查询将对象数组发布到asp.net-mvc控制器操作的正确方法是什么?,javascript,jquery,ajax,asp.net-mvc,http-post,Javascript,Jquery,Ajax,Asp.net Mvc,Http Post,我有一组数据: var myArray = [{"id": 1, "name", "John"},{"id": 2, "name", "Joe"},{"id": 3, "name", "Bill"}] $.post("/MyController/Update", myArray, function (data) { alert("Complete"); }); 下面是我的asp.net-mvc控制器操作 public ActionResult Update(List<

我有一组数据:

var myArray = [{"id": 1, "name", "John"},{"id": 2, "name", "Joe"},{"id": 3, "name", "Bill"}] 

 $.post("/MyController/Update", myArray, function (data) {
       alert("Complete");
 });
下面是我的asp.net-mvc控制器操作

public ActionResult Update(List<Person> people)
{
     return Json(new {Success = true});
}

public class Person
{
    public int id {get;set;}
    public string name {get;set;}
}
但当我查看服务器上的people参数时,我会看到:

  • 空的
  • 由3项组成的数组,但Id的值始终为0,Name的值始终为空字符串

  • 关于我这里做错了什么有什么建议吗?

    您的javascipt对象属性没有索引器,因此您需要使用ajax
    contentType:“application/json”
    选项并将对象字符串化

    var myArray = [{"id": 1, "name", "John"},{"id": 2, "name", "Joe"},{"id": 3, "name", "Bill"}] 
    
    $.ajax({
      type: 'post',
      url: '@Url.Action("Update", "MyController")', // don't hardcode your url's!
      contentType: "application/json; charset=utf-8",
      data: JSON.stringify({ people: myArray }),
      success: function (data) {
        ....
      }
    })
    
    旁注。以下对象将发回

    var myArray = { people[0].id: 1, people[0].name: "John", people[1].id: 2, people[1].name: "Joe" }
    
    使用


    我个人最喜欢的是使用
    JSON.NET
    (可通过
    NuGet
    获得)

    您可以在您的操作中定义它所期望的
    JObject
    JArray

    然后在操作中,您只需将输入转换为预期类型

    从js的角度来看,你只是正常地做你的文章

    例如:

    public ActionResult Update(JArray input)
    {
         var persons = input.Select(x=>x.ToObject<Person>()) // This will return an `Enumerable<Person>`
         //Do your other stuff here
         return Json(new {Success = true});
    }
    
    public class Person
    {
        public int id {get;set;}
        public string name {get;set;}
    }
    
    公共操作结果更新(JArray输入)
    {
    var persons=input.Select(x=>x.ToObject())//这将返回一个`可枚举变量'`
    //在这里做你的其他事情
    返回Json(新的{Success=true});
    }
    公共阶层人士
    {
    公共int id{get;set;}
    公共字符串名称{get;set;}
    }
    
    试试这个

    首先像这样更改数组

    var myArray = [{"id": 1, "name": "John"},{"id": 2, "name": "Joe"},{"id": 3, "name": "Bill"}] ;
    
    然后尝试使用$.ajax()发布


    here键的可能重复项是:-data:JSON.stringify({people:myArray}),
    public ActionResult Update(JArray input)
    {
         var persons = input.Select(x=>x.ToObject<Person>()) // This will return an `Enumerable<Person>`
         //Do your other stuff here
         return Json(new {Success = true});
    }
    
    public class Person
    {
        public int id {get;set;}
        public string name {get;set;}
    }
    
    var myArray = [{"id": 1, "name": "John"},{"id": 2, "name": "Joe"},{"id": 3, "name": "Bill"}] ;
    
    $.ajax({
        url: "/MyController/Update",
        type: "POST",
        datatype: 'json',
        contentType: "application/json",
        data: JSON.stringify(myArray),
        success: function (data) {
              alert("Complete");
        }
    });