2012-09-02 157 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))})