使用json传递一个对象数组给mvc控制器
Passing an array of objects to mvc controller using json
我试图将Json数据模型绑定到MVC中的属性类。对象2被传递到控制器OK。对象3是列表的列表,我不确定我的数据结构在javascript中是否正确。
我正在接收BlockEntrances数据(数组的大小),但不是BlockEntranceButtons数据。
"BlockEntranceButtons"不出现在Json字符串,当我认为它应该在那里。
谁能告诉我正确的方向?编辑:将step3 in改为2个对象。Json字符串看起来更像我想要的,但我的控制器仍然接收一个空值。
Javascript:Step2 = {};
Step2.MainEntranceButtons = [0, 1, 2, 3, 4, 5, 6, 7, 8]
Step3 = {};
Step3.BlockEntrances = {};
Step3.BlockEntrances.BlockEntranceButtons = [];
Step3.BlockEntrances.BlockEntranceButtons[0] = [1, 2, 3, 4, 5, 6, 7, 8];
Step3.BlockEntrances.BlockEntranceButtons[1] = [8, 7, 6, 5, 4, 3, 2, 1];
Step3.BlockEntrances.BlockEntranceButtons[2] = [5, 5, 5, 5, 5, 5, 5, 5];
var StringToPost = JSON.stringify({ Step2Object: Step2, Step3Object: Step3 });
$.ajax({
url: "/Home/CollectJson1/",
type: 'POST',
contentType: "application/json",
dataType: 'html',
data: StringToPost,
success: function (data) {
console.log(data);
}
});
控制器:
<HttpPost>
Function CollectJson1(ByVal Step2Object As Step2Data, ByVal Step3Object As Step3Data) As JsonResult
Return Json(Step3Object)
End Function
类:
Public Class Step2Data
Public Property MainEntranceButtons As List(Of String)
End Class
Public Class Step3Data
Public Property BlockEntrances As List(Of Step3SubData)
End Class
Public Class Step3SubData
Public Property BlockEntranceButtons As List(Of String)
End Class
Object3的Json数据:
{"Step3Object":{"BlockEntrances":{"BlockEntranceButtons":[[1,2,3,4,5,6,7,8],[8,7,6,5,4,3,2,1],[5,5,5,5,5,5,5,5]]}}}
数组索引没有名称,因此它不像您在问题的原始版本中期望的那样工作。如果有,你会有3个叫做BlockEntranceButtons。你如何区分它们?
你现在得到的与我认为更合适的相似:
Step3.BlockEntrances = [
{ EntranceID: 1, BlockEntranceButtons: [1,2,3,4,5,6,7,8] },
{ EntranceID: 2, BlockEntranceButtons: [8,7,6,5,4,3,2,1] },
{ EntranceID:3, BlockEntranceButtons: [5,5,5,5,5,5,5,5] }
];
你想做的事情与服务器端的代码结构并不匹配,在我看来,这个结构有点混乱。
如果是我,我会把所有的入口都当作相同的,只是有一个旗帜来说明它是主入口还是块入口。这样就不需要为每一种数据结构单独设置了。也许可以这样写(考虑到我不知道你的确切要求):
JS:
var Entrances = [
{ EntranceID: 1, BlockID: "main", EntranceButtons: [0,1,2,3,4,5,6,7,8] },
{ EntranceID: 2, BlockID: "A", EntranceButtons: [8,7,6,5,4,3,2,1] },
{ EntranceID: 3, BlockID: "A", EntranceButtons: [9,5,1,7,3,4,2,1] },
{ EntranceID: 4, BlockID: "B", EntranceButtons: [5,5,5,5,5,5,5,5] }
];
VB: Public Class Entrance
public Property EntranceID As Int
public Property BlockID As String
public Property EntranceButtons As Int()
End Class
<HttpPost>
Function CollectJson1(ByVal Entrances As List(Of Entrance)) As JsonResult
Return Json(Entrances)
End Function
如果有必要的话,您可能还会使用一个名为Block的类来表示不同的Block,并带有ID和Description。
相关文章:
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 将不在模型中的数据返回到mvc控制器
- 使用查询将对象数组发布到asp.net-mvc控制器操作的正确方法是什么
- 从 javascript 获取 MVC 控制器中的操作参数时出错
- 使用 $.getJson 方法从 jquery 调用 C# MVC 控制器方法
- 将数据从MVC控制器传递到Angular视图,而不在最终的html中显示数据值
- 有可能将东西存储在MVC控制器中吗
- 如何使用json对发送到MVC控制器的数据进行编码
- POST KnockoutJS数据到mvc控制器没有绑定
- 在Javascript函数中获取MVC控制器名称
- ASP.NET MVC:2d数组在从javascript传递到MVC控制器操作后为null
- 如何将JavaScript文件路径映射到ASP.Net MVC控制器操作
- AJAX只将数组的最后一个元素传递给MVC 5控制器
- 无法使用.ajax调用显示MVC控制器返回的属性值
- 使用ajax将字符串数组传递给mvc控制器
- 数据从Javascript传递到MVC控制器
- 通过url将jsonArray传递给mvc控制器,无法获取对象
- 使用MVC控制器与websockets连接到windowsazure
- AngularJS vs MVC控制器选择什么