使用json将对象数组传递给mvc控制器

时间:2016-10-05 14:01:01

标签: javascript json asp.net-mvc vb.net

我尝试将绑定Json数据建模到MVC中的属性类。对象2传入控制器OK。对象3是列表列表,我不确定我的数据结构在javascript中是否正确。

我收到BlockEntrances数据(数组大小),但没有收到BlockEntranceButtons数据。

" BlockEntranceButtons"当我相信它应该存在时,它不会出现在Json字符串中。

有人可以指出我正确的方向吗?

编辑:

将step3改为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

Json Data发布了Object3:

{"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]]}}}

1 个答案:

答案 0 :(得分:1)

数组索引没有名称,因此它不像您在问题的原始版本中所期望的那样工作。如果他们这样做了,你就会有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的类来表示具有ID和描述的不同块。