C# C语言中从ajax向控制器发送数据#

C# C语言中从ajax向控制器发送数据#,c#,ajax,asp.net-mvc,C#,Ajax,Asp.net Mvc,我正在用javascript创建一个具有LocationId和id的对象 我在C#中有一个类MyClass,包含这两个变量 我有一个ajax调用,它调用控制器中的一个方法: MyMethod(List<MyClass> myObject, int user_id) 在ajax调用中 调用该方法时,myObject具有正确的长度,但LocationId和id均为0。为什么会发生这种情况以及如何解决 public class MyClass { public int Loca

我正在用javascript创建一个具有LocationId和id的对象

我在C#中有一个类MyClass,包含这两个变量

我有一个ajax调用,它调用控制器中的一个方法:

MyMethod(List<MyClass> myObject, int user_id)
在ajax调用中

调用该方法时,myObject具有正确的长度,但LocationId和id均为0。为什么会发生这种情况以及如何解决

public class MyClass {
     public int LocationId {get; set;}
     public int id {get; set;}
}
Javascript:

var myArray = new Array();
var object = new {
    LocationId: 1;
    id: 2;
}
myArray.push(object);
阿贾克斯:


用于创建对象的Javascript代码无效。试试这个:

var myArray = new Array();
var object = {       // No new
    LocationId: 1,   // , instead of ;
    id: 2
}
myArray.push(object);
顺便说一下,您可以将其缩短为:

var myArray = [ { LocationId: 1, id: 2 } ];
我同意亚历克斯的看法。 我会这样更改您的ajax调用:

$.ajax({
    type: 'POST',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8;',
    url: "correctUrl",
    data: JSON.stringify( {user_id: 1, myObject: myArray} ),
    // traditional: true,
    error: function (req, status, error) {
        alert(error);
    }
});
    [HttpPost]
    public ActionResult MyMethod(jSonObject myData)
    {
        ...
    }
我已经删除了
traditional:true
您在这里不需要它。
将提交类型更改为POST。它可以更好地处理序列化对象。
我已经用JSON.stringify转换了提交的数据

您可以下载json2.js并查找更多信息

我这样改变了你的C#类:

public class MyClass
{
    public int LocationId { get; set; }
    public int id { get; set; }
}

[Serializable]
public class jSonObject
{
    public int user_id { get; set; }
    public List<MyClass> myObject { get; set; }
}
我建议的另一件事是实现一个JsonValueProviderFactory

您可以找到许多有用的信息,而且。

您的C代码甚至无法编译。属性声明后不能有分号。我认为您缺少内容类型:application/json
public class MyClass
{
    public int LocationId { get; set; }
    public int id { get; set; }
}

[Serializable]
public class jSonObject
{
    public int user_id { get; set; }
    public List<MyClass> myObject { get; set; }
}
    [HttpPost]
    public ActionResult MyMethod(jSonObject myData)
    {
        ...
    }