2014-10-14 3 views
0

나는 어떻게해야하는지 알 수없는 상황이 있습니다. 컨트롤러에서 보낸 JSON 개체에 항목을 추가하려고합니다.JSON 개체에 항목 추가

public class Model1 
{ 
    public Model2 item {get;set;} 
    public List<Model2> items {get;set;} 
     // 

을 그리고 페이지

var jsonData = @Html.Raw(JSON.Encode(Model)) 

이 나에게 기본적이지만 빈 모델을 제공합니다

여기 내 모델입니다. 이제이 페이지에서 다양한 필드를 채우고 항목을 모델에 추가하여 게시하려고합니다. 그래서 :

jsonData.item.field1 = $("#field1").val(); 

은 그럼 항목의 목록에 추가 할,하지만 작동 아무것도 찾을 수 없습니다 :

jsonData.items.add(jsonData.item) 

이 작동하지 않는 오류가 발생합니다.

jsonData.items.push(jsonData.item); 

작동하지만 추가 한 모든 항목이 동일하게 끝납니다. 두 번째 항목을 추가 할 때 목록에 두 개가 있지만 동일한 값이 있음을 의미합니다. 어떤 도움을 주시면 감사하겠습니다.

+3

언제'jsonData.item'이 새로운 값을 얻고 있습니까? 만약 당신이 그것을 변경하지 않는다면 매번 같을 것입니다. – pollirrata

+0

당신의 문제는 JSON과 관련이 없지만, 자바 스크립트에서 배열과 객체가 작동하는 방식과 관련이 있습니다. 'jsonData'는 JSON가 아닌 * object *입니다. 이미 설명한대로 새로운 값을'jsonData.item'에 할당하지 않으면 새로운 값을 생성하지 않고 기존 값을 변경하는 것입니다. –

+0

당신은 더 명확하고, 적절한 코드를 게시 할 수 있습니다 @ pollirrata에 의해 나는 그 값을 한 번 이상 변경하지 않을 것이라고 생각합니다. – dariogriffo

답변

1

아시다시피 자바 스크립트는 OO 언어로 사용할 수 있으며 클래스 및 객체는 자바 스크립트에서 바로 만들 수 있습니다. 나의 이해 당 ,이 JSON은 클라이언트 측에 반환 될 때 자바 스크립트

var jsonData = @Html.Raw(JSON.Encode(Model)) 

에 클래스 속성을 얻기 위해 코드 아래 사용하고, 그것은 단일 개체로 간주됩니다.

그래서, 당신은 클래스 역할을하는 함수를 선언 할 수

function Model2(jsonData) { 
     this.name  = jsonData.name; 
     this.discovered = jsonData.discovered; 
    }; 

    var objModel2_1= new Model2(jsonData); 

지금, 당신은 objModel2을 추가하는 배열을 선언 할 수 있습니다. 작업이 완료되면

var arrModel2=[]; 
// add new objects 

attModel.push(objModel2_1); 

마지막으로, , 당신은 즉

jsonData.item=objModel2_1; 
    jsonData.items=attModel; 

희망을 채우기 위해 기존 jsonData 객체를 사용할 수 있습니다, 이것은 당신을 도움이 될 것입니다.

+0

좋아, 그 트릭을 했어. 별도의 배열을 만들고 배열에 추가 한 다음 동일한 배열을 설정해야했습니다. 이제 내 문제는 모델을 서버에 다시 게시하는 것입니다. –

+0

이 데이터 게시는 그리 어렵지 않습니다. javascript와 ajax를 사용하여 게시하는 경우 개체를 문자열화하고 게시하십시오.받은 후 자신의 개체를 얻으려면 DE 직렬화하십시오. – Johney