2012-09-02 4 views
6

Jquery Dailog에서 부분 뷰를 반환하고 특정 컨트롤러 액션에 viewmodel 객체를 전달하고 싶습니다. 어떻게해야합니까?Url.Action을 사용하여 모델을 전달하는 방법은 무엇입니까?

보기

@Html.DropDownListFor(model => model.SelectedCountry, new SelectList(Model.CountryList, "CountryCode", "CountryName"), "---SELECT COUNTRY---", 
            new { @class = "chosen", @onchange = "this.form.action='/Home/Index'; this.form.submit(); " }) 
<input type="button" id="button1" value="Push"/> 
<div id="dialog" title="Report" style="overflow: hidden;"></div> 

JS

<script type="text/javascript"> 
$(function() { 
    $('#dialog').dialog({ 
     autoOpen: false, 
     width: 400, 
     resizable: false, 
     title: 'Report', 
     modal: true, 
     open: function() { 
      //here how to pass viewmodel 
      $(this).load("@Url.Action("CreatePartial")"); 
     }, 
     buttons: { 
      "Close": function() { 
       $(this).dialog("close"); 
      } 
     } 
    }); 

    $('#button1').click(function() { 
     $('#dialog').dialog('open'); 
    }); 
}); 

컨트롤러

현재 "homeViewModel.SelectedCountry"는 Null이며 Jquery에서 모델을 전달하는 방법은 무엇입니까?

$(this).load('@Url.Action("CreatePartial")',@Html.Raw(Json.Encode(Model))); 

@ Html.Raw는 HTML 인코딩을 방지하기 위해 필요하다 :

답변

3

당신은 단지에 귀하의 요청을 수정 빌드에서 JSON-도우미를 사용하여 JSON 객체로 모델을 변환합니다.

테스트를 거쳤습니다.

+3

$().ajax({method: 'POST'}) 같이 HTTP POST를 (사용 및 POST 데이터로 데이터를 전달합니다. –

+0

을 당신은 IE, 맞아 해당 코드를 추가해 주셔서 감사합니다. – developer10214

+0

고맙습니다. – user584018

4

AJAX를 사용하는 경우 HTTP GET을 사용하여 서버에 모델을 전달하지 않아야합니다. 대신 URL이 적어도 여러 브라우저에서 길이 제한을 (가로)이 작은 모델에만 작동합니다 있습니다 ($().ajax({method: 'POST', data: @Html.Raw(Json.Encode(Model))}))

관련 문제