【问题标题】:Passing an array of objects to mvc controller using json使用 json 将对象数组传递给 mvc 控制器
【发布时间】:2016-10-05 14:01:00
【问题描述】:

我试图将 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

为 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。你会如何区分它们?您的意思是在 BlockEntrances 的每个索引处添加一个 object,其中包含一个 ID,然后是另一个名为 BlockEntranceButtons 的属性?这会产生某种逻辑意义——一组按钮用于 3 个不同的入口?
  • 是的,这就是我的意思,如果没有清楚地表达这一点,对不起

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


【解决方案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 的类来表示不同的 Block,并带有 ID 和 Description。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2017-11-25
    • 2018-10-07
    相关资源
    最近更新 更多