6

我想在 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 中传递模型?

4

2 回答 2

4

如果您使用 AJAX,则不应使用 HTTP GET 将模型传递给服务器。而是使用 HTTP POST(如 in$().ajax({method: 'POST'})并将数据作为 POST 数据 ( $().ajax({method: 'POST', data: @Html.Raw(Json.Encode(Model))}))

于 2012-09-02T19:09:18.630 回答
3

您可以使用内置 JSON-helper 将模型转换为 JSON 对象,只需将您的请求修改为:

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

需要@Html.Raw 来防止 HTML 编码。

我测试了它并且它有效。

于 2012-09-02T18:39:30.720 回答