【发布时间】:2013-11-29 19:27:06
【问题描述】:
假设我有一个 javascript 对象,例如:
function Parent(n, c) {
this.Name = n;
this.Children = c;
}
var p = new Parent("asdf", [1,2,3]);
我想通过 JSON 将 parent 对象及其子对象的数组传递给 MVC 4 控制器。
我将如何格式化 ajax 请求?我见过quiteafewotherquestions 沿着这些路线,尽管没有使用数组作为成员变量。
这是我目前所拥有的:
var parents = [];
parents.push(new Parent("qwer", "child1"));
parents.push(new Parent("sdfg", 12345));
parents.push(new Parent("zxcv", [4,5,6]));
$.ajax({
url: MakeUrl("Ctlr/Action"),
type: "POST",
contentType: 'application/json;charset=utf-8',
data: JSON.stringify({
parents : parents
}),
success: function (data, state, xhr) {
$("#someDiv").html(data);
},
error: function (xhr, state, err) {
Utility.displayError(xhr.reponseText);
}
});
stringify 的结果其实看起来很合理:
"{"parents":[{"Name":"qwer","Value":"child1"}, {"Name":"sdfg","Value":12345}, {"Name":"zxcv","Value":[4,5,6]}]}"
这是控制器动作:
public ActionResult Action(IEnumerable<Parent> parents) {
...
}
如果相关,服务器端 Parent 对象:
public class Parent {
public string Name { get; set; }
public object Children { get; set; }
}
Children 是 object,因为它有时是另一种数据类型 - 我意识到这可能有点代码味道,但这个类的最终功能是将任意参数传递给我们的报告引擎。
简单的数据类型似乎以这种方式工作得很好(日期、整数、字符串等),但 Children 数组只是以 {object} 的形式出现,据我所知,这甚至不是字符串,但是一些通用的 System object。有没有办法在 MVC 中做到这一点而无需诉诸,例如,将其推入字符串并解析出来?
【问题讨论】:
-
你试过
dynamic而不是object吗?这里的问题是object本身不能转换为IEnumerable。 -
@MichaelPerrenoud 使用
dynamic会产生相同的行为。
标签: javascript asp.net-mvc arrays stringify