我正在使用LocationId和id在javascript中创建一个对象。
我在C#中有一个带有这两个变量的MyClass类。
我有一个调用控制器中方法的ajax调用:
MyMethod(List<MyClass> myObject, int user_id)
我用:
traditional: true
该方法被调用,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}
});
答案 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 。
您可以找到许多有用的信息here和here。