1

我正在使用 LocationId 和 id 在 javascript 中创建一个对象。

我在 C# 中有一个带有这两个变量的类 MyClass。

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

MyMethod(List<MyClass> myObject, int user_id)

我用:

traditional: true

在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);

阿贾克斯:

$.ajax({
    type: "GET",
    url: "correctUrl",
    traditional: true,
    data: { user_id: 1, myObject: myArray}
});
4

2 回答 2

2

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

var myArray = new Array();
var object = {       // No new
    LocationId: 1,   // , instead of ;
    id: 2
}
myArray.push(object);

顺便说一句,您可以将其缩短为:

var myArray = [ { LocationId: 1, id: 2 } ];
于 2012-10-26T08:09:33.640 回答
0

我同意亚历克斯。我会像这样改变你的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);
    }
});

我已经删除了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; }
}

并且您的 MVC 操作应如下所示:

    [HttpPost]
    public ActionResult MyMethod(jSonObject myData)
    {
        ...
    }

我建议的另一件事是实现JsonValueProviderFactory你可以在这里这里
找到很多有用的信息。

于 2012-10-26T08:51:00.983 回答