jQuery ajax传递模型作为参数

时间:2014-02-15 17:24:00

标签: javascript jquery ajax json razor

我有一个包含jQuery ajax函数的razor页面我想将模型作为参数发送给。我在许多地方使用$('form')。serialize(),这是参数设置的唯一方法。但是,这里我想传递三个特定参数。第二个正在按预期工作,但无论我做什么,模型总是以null为单位。谁能指出我做错了什么?

//modal button click events to update mailhandlers for selected accounts
$('#updateMailhandler').click(function () {
    //add the selected ids to the hidden control to pass values to controller
    var selectedIds = "";
    $('[name$=".selected"]').each(function () {
        if (this.checked) {
            selectedIds = selectedIds + ',' + $.trim($(this).parent().parent().find('.accountid').text());
        }
    });
    selectedIds = selectedIds.substring(1);
    //retrieve selected mailhandlerid
    var mhid = $('#mailhandlerId').val();

    //execute the controller method
    $.ajax({
        url: '@Url.Action("UpdateMailhandler", "SendingReport")',
        dataType: 'json',
        data: { model: $('form').serialize(), selectedAccountString: selectedIds, mailhandlerId: mhid },
        type: 'POST'
    })
})

我尝试删除dataType声明。我已经尝试在JSON.stringify中包装$('form')。serialize()而没有做任何事情。显然,这必须是接近的,因为它找到了方法,只是模型为空!

1 个答案:

答案 0 :(得分:0)

我最近遇到了类似的问题,最后将模型存储在TempData中,然后在Ajax调用的操作中再次检索它(在你的情况下是UpdateMailHandler)。

如果我没记错的话,这是因为mvc路由不支持将复杂类型作为路由值传递。您可以创建一个自定义路由,以接受模型的每个属性作为参数,如果它们是简单类型,但只是将值存储在TempData中更清晰。