在C#中将数据从ajax发送到控制器

时间:2012-10-26 07:09:35

标签: c# ajax asp.net-mvc

我正在使用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:

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

2 个答案:

答案 0 :(得分: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 } ];

答案 1 :(得分:0)

我同意Alex的观点。 我会改变你的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 here并找到更多信息here

我已经用这种方式改变了你的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
您可以找到许多有用的信息herehere