2012-09-02 192 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'); 
    }); 
}); 

控制器

public ActionResult CreatePartial(HomeViewModel homeViewModel) 
{ 
     return PartialView("_CreatePartial", homeViewModel); 
} 

目前,「homeViewModel.SelectedCountry」爲Null,如何在Jquery中傳遞模型?

回答

3

您轉換模型成JSON對象使用的內建JSON輔助,只需修改您的要求:

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

@ Html.Raw需要防止HTML編碼。

我測試了它,它工作。

+3

請注意,它會與小模特只工作,爲的URL有長度限制(在多個瀏覽器至少)。 –

+0

你是對的,IE這是衆所周知的。謝謝你只是增加相應的代碼。 – developer10214

+0

thanx很多... – user584018

4

如果您使用AJAX,則不應使用HTTP GET將模型傳遞到服務器。相反,使用HTTP POST(如$().ajax({method: 'POST'})和傳遞數據的POST數據($().ajax({method: 'POST', data: @Html.Raw(Json.Encode(Model))})