2012-07-02 3 views
0

두 개의 객체를 인수로 사용하는 컨트롤러 작업이 있습니다. 나는 그들이 항상 null로 돌아 오는 모든 일을 할 수 없습니다. 내 최근 시도는 아래와 같습니다. 나는 많은 다른 변이를 시도했다. 이 경우 FormInfo 클래스는 Form1 및 Form2의 유형 인 2 개의 속성이있는 클래스입니다. 나는 또한 두 개의 클래스를 인자로 받아들이고 데이터 부분은 잘 작동하지 않는 {form1 : form1Data, form2 : form2Data}처럼 보였다. 또한 JSON.stringify를 사용하여 운이없는 데이터를 구성 해 보았습니다. 네트워크 모니터를 보면 서버로 돌아가는 데이터를 볼 수 있습니다. MVC가 쿼리 문자열을 디코드하는 데 사용하는 엔진 만이 객체를 처리 할 수 ​​없습니다. 미리 정보를 제공해 주셔서 감사합니다.MVC 3 jquery ajax post 2 objects

클라이언트 측

var formData = $("#form1").serialize(); 
var formData2 = $("#form2").serialize(); 
var formInfo = new Object(); 

formInfo.FormData = formData; 
formInfo.FormData2 = formData2; 

$.ajax({ 
    url: 'Controller/Action', 
    type: 'POST', 
    data: formInfo, 
    success: function (data) { 
     //do stuff 
    } 
}); 

서버 측

public ActionResult SaveForms(FormInfo formInfo) 
{ 
    //Do Stuff here 
} 
+0

JSON.stringify (formInfo)로 시도하십시오 –

+0

게시 내용은 어떻게 생겼습니까? 바이올린을 게시 할 수 있습니까? – Maess

+0

@ClaudioRedi 나는 주사위를 사용하지 않았다 : ( –

답변

1

당신은 .serializeArray()의 jQuery 방법과 함께의 A JSON 요청을 사용할 수 있습니다. 의는 다음과 같은 모델을 가지고 있다고 가정하자 :

Form1DataForm2Data
public class FormInfo 
{ 
    public Form1Data Form1Data { get; set; } 
    public Form2Data Form2Data { get; set; } 
} 

일부 완전히 임의의 복잡한 클래스입니다. 이제 클라이언트에서 두 개의 별개 형식 (#form1#form2)을 가지고 있고 입력 요소 이름이 default model binder wire format이라는 복잡한 구조와 일치한다고 가정합니다. Ajax 요청을 보내고 함께 2 개 형태를 포장하는 것은 사소한된다 :

var form1Data = {}; 
$.each($('#form1').serializeArray(), function() { 
    form1Data[this.name] = this.value; 
}); 

var form2Data = {}; 
$.each($('#form2').serializeArray(), function() { 
    form2Data[this.name] = this.value; 
}); 

$.ajax({ 
    url: '@Url.Action("someaction", "somecontroller")', 
    type: 'post', 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify({ 
     form1Data: form1Data, 
     form2Data: form2Data 
    }), 
    success: function (result) { 
     // TODO: do something with the result 
    } 
}); 

그리고

물론 컨트롤러 액션은이 같은 외모에 게시됩니다

[HttpPost] 
public ActionResult SomeAction(FormInfo formInfo) 
{ 
    ... 
} 
+0

항상 감사합니다 Darin! 나를 위해 작동하지 않았지만 내가 serialization과 함께 뭔가 잘못하고 있다고 생각합니다. 분명히 저는 :).나는 좀 더 생산적인 일을 마친 후 오늘 밤에 좀 더 장난감을 사러 갈 것입니다. 나는 그것을 작동 시키 자마자 대답 할 것입니다. –

0

나는 이런 식으로 뭔가를하고있는 중이 야하지만 난이 내 컨트롤러를 전달할 객체 및 기타 FormData

var discrepancy = self.newCptyReply();

 if ($('#UploadFile')[0]) { 
      var upload = new FormData(), 
       file = $('#UploadFile')[0].files[0]; 

      upload.append('id', self.globalMessageId()); 
      upload.append('discrepancy', ko.toJSON(discrepancy)); 
      upload.append('doc', file); 


     }   

     datacontext.saveCptyToReply(self, upload); 

그리고 컨트롤러 서명에

public ActionResult SaveCptyToReply(Guid id, Trade discrepancy, HttpPostedFileBase doc) 

하지만 컨트롤러 ID를 도달 할 때, 의사가 확인하지만 funciton가 호출 될 때 불일치 ... 그것은 데이터를 널 (null)이됩니다 ..

무엇에 do ...