C# C语言中从ajax向控制器发送数据#
我正在用javascript创建一个具有LocationId和id的对象 我在C#中有一个类MyClass,包含这两个变量 我有一个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
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)
{
...
}