use*_*388 3 c# asp.net-mvc jquery asp.net-mvc-4
jQuery的:
$('#test').click(function () {
var obj = new Object();
var childObj = new Object();
childObj.name = 'dominic';
childObj.age = 22;
obj.children = new Object ({ child : childObj });
console.log(obj);
$.ajax({
url: '@Url.Action("Test")',
type: 'POST',
data: obj,
dataType: 'json',
success: function (msg) {
//console.log(msg.status);
}
});
});
Run Code Online (Sandbox Code Playgroud)
C#(MVC 4):
public JsonResult Test(testObj obj)
{
foreach (childObj child in obj.children)
{
Debug.Print(child.name);
Debug.Print(child.age);
}
return Json(null);
}
public class testObj
{
public List<childObj> children { get; set; }
}
public class childObj
{
public string name { get; set; }
public string age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我调试时,obj有一个children属性,但它总是null ...在我的浏览器控制台中,它不是null ...
Dar*_*rov 10
首先,我建议您将复杂对象从客户端发送到服务器作为JSON:
$.ajax({
url: '@Url.Action("Test")',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(obj),
dataType: 'json',
success: function (msg) {
//console.log(msg.status);
}
});
Run Code Online (Sandbox Code Playgroud)
需要注意的事项:
contentType: 'application/json'data: JSON.stringify(obj)此外children,客户端上的属性必须是数组,而不是属性:
var obj = {};
var childObj = {};
childObj.name = 'dominic';
childObj.age = 22;
obj.children = [];
obj.children.push(childObj);
Run Code Online (Sandbox Code Playgroud)
或者干脆:
var obj = {
children: [
{ name: 'dominic', age: 22 }
]
};
Run Code Online (Sandbox Code Playgroud)
另一个注释:在服务器上,您的Age属性被定义为字符串,而在客户端上,您将它作为integer(age: 22)传递,这是不一致的.除此之外,您不需要将所有C#属性都放在小写中.那太可怕了.JavaScriptSerializer足够智能,可以遵守标准的C#命名约定:
public class TestObj
{
public List<ChildObj> Children { get; set; }
}
public class ChildObj
{
public string Name { get; set; }
public string Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)