我想在Jquery Dailog中返回一个局部视图,并希望将viewmodel对象传递给特定的控制器动作,该怎么做?
查看
@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中传递模型?
答案 0 :(得分:4)
如果您使用的是AJAX,则不应使用HTTP GET将模型传递给服务器。而是使用HTTP POST(如$().ajax({method: 'POST'})
中所示,并将数据作为POST数据传递($().ajax({method: 'POST', data: @Html.Raw(Json.Encode(Model))})
)
答案 1 :(得分:3)
使用内置JSON帮助程序将模型转换为JSON对象,只需将请求修改为:
$(this).load('@Url.Action("CreatePartial")',@Html.Raw(Json.Encode(Model)));
需要@ Html.Raw来防止HTML编码。
我测试了它并且有效。