通过javascript将包含数组的对象数组传递给MVC操作
Pass array of objects containing arrays to MVC action via javascript
假设我有一个javascript对象,如:
function Parent(n, c) {
this.Name = n;
this.Children = c;
}
var p = new Parent("asdf", [1,2,3]);
我想通过JSON将parent
对象及其子对象的数组传递给MVC 4控制器。
如何格式化ajax请求?我已经看到了许多其他问题,尽管没有一个问题使用数组作为成员变量。
这就是我目前所拥有的:
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);
}
});
字符串的结果实际上看起来是合理的:
"{"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}
出现,据我所知,它甚至不是字符串,而是一些通用的系统对象。有没有一种方法可以在MVC中做到这一点,而不必求助于,比如,将其推送到字符串中并解析出来?
现在,我已经决定通过javascript提交一个平面列表,然后在服务器端构建它。
javascript:
var parents = [];
parents.push(new Parent("asdf", "qwer"));
parents.push(new Parent("zxcv", 123456));
[4,5,].forEach(function (e, i) {
params.push(new Parent("Children[" + i + "]", e));
});
JSON.stringify
:之后是这样的
[{"Name":"asdf","Value":"qwer"},{"Name":"zxcv","Value":123456},{"Name":"Children[0]","Value":4},{"Name":"Children[1]","Value":5},{"Name":"Children[2]","Value":6}]
然后通过以下功能在控制器中展开:
private IEnumerable<Parent> Unzip(IEnumerable<Parent> parameters) {
var unzipped = new Dictionary<string, Parent>();
var r = new Regex(@"(.*)'[.*']");
foreach (var p in parameters)
{
var match = r.Match(p.Name.ToString());
if (match.Success)
{
var name = match.Groups[1].Value;
if (!unzipped.ContainsKey(name))
unzipped.Add(name, new Parent() { Name = name, Value = new List<object>() { } });
((List<object>)(unzipped[name].Value)).Add(p.Value);
}
else
unzipped.Add(p.Name, p);
}
return unzipped.Values;
}
相关文章:
- 将Javascript数组发送到控制器ASP.NET MVC
- 使用查询将对象数组发布到asp.net-mvc控制器操作的正确方法是什么
- 打印从Spring MVC Controller发送的字符串数组只显示“;toJSON”;在javascript中
- MVC:使用Web窗体视图引擎在javascript中迭代Viewbag数组
- 在数组 C# MVC 剃须刀中使用命名键
- 将列表<字符串>转换为客户端 ASP.NET MVC 上的 Json 数组
- 将2D对象数组C#转换为MVC中的Javascript
- 将选定值数组发送到控制器-MVC
- ASP.NET MVC:2d数组在从javascript传递到MVC控制器操作后为null
- AJAX只将数组的最后一个元素传递给MVC 5控制器
- 通过javascript将包含数组的对象数组传递给MVC操作
- 使用ajax将字符串数组传递给mvc控制器
- 将 MVC 4 Razor 变量转换为 JavaScript 数组
- Javascript对象数组到MVC操作几乎不起作用,但不是完全
- 如何在C# MVC的VIew中将列表数组拆分为单独的数组
- 如何将 JavaScript 数组发布到 MVC 3 控制器操作(由于文件下载而没有 AJAX)
- 将对象数组发送到 MVC 控制器
- 如何将 JSON 对象中的数组从 javascript 传递到 asp.net mvc 控制器方法
- Javascript数组发送到 asp.net MVC控制器
- 从 JSON 数组中获取值,在 MVC 视图中使用 jQuery 从 JSON 对象中检索值