2016-10-05 5 views
0

MVC의 속성 클래스에 Json 데이터 바인딩을 모델링하려고 시도했습니다. 개체 2가 컨트롤러로 전달됩니다. 확인을 클릭합니다. 개체 3 목록 목록이며 내 데이터 구조가 자바 스크립트에서 올바른지 모르겠습니다.json을 사용하여 mvc 컨트롤러에 객체 배열 전달

BlockEntrances 데이터 (배열 크기)를 받았지만 BlockEntranceButtons 데이터를받지 못했습니다.

"BlockEntranceButtons"는 Json 문자열에 있어야한다고 생각하면 나타나지 않습니다.

누군가 올바른 방향으로 나를 가리켜 주시겠습니까?

편집 :

변경된 3 단계에서 2 단계 개체. Json 문자열은 내가 원하는 것처럼 보이지만 내 컨트롤러는 여전히 Null 값을 받고 있습니다.

자바 스크립트 :

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 데이터 오브젝트 4에 대한 게시 :

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

아니요. 배열 색인에는 이름이 없으므로 no입니다. 그리고 만약 그렇게했다면, BlockEntranceButtons라고 불리는 3 가지가 있습니다. 어떻게 구별 할 수 있니? BlockEntrances의 각 인덱스에 _object_를 추가하고, 그 안에 ID가 있고 BlockEntranceButtons라는 또 다른 속성이 있습니까? 그것은 일종의 논리적 인 감각을 만들 것입니다 - 3 개의 서로 다른 출입구를위한 버튼 세트? – ADyson

+0

예, 그게 무슨 뜻인지, 미안, 포인트가 분명히 나타나지 않았다면. –

답변

1

배열 색인에는 이름이 없으므로 원래 버전의 질문에서 기대했던대로 작동하지 않습니다. 그리고 만약 그렇게했다면, BlockEntranceButtons라고 불리는 3 가지가 있습니다. 어떻게 구별 할 수 있니?

는 당신이 지금 가지고하는 것은 좀 더 적합 할 것이라고 생각하는 것과 유사합니다

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 

필요한 경우, 당신은 아마 끝낼 것 클래스를 호출하여 ID와 설명이있는 다른 블록을 나타냅니다.

관련 문제