我有一个包含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()而没有做任何事情。显然,这必须是接近的,因为它找到了方法,只是模型为空!
答案 0 :(得分:0)
我最近遇到了类似的问题,最后将模型存储在TempData中,然后在Ajax调用的操作中再次检索它(在你的情况下是UpdateMailHandler)。
如果我没记错的话,这是因为mvc路由不支持将复杂类型作为路由值传递。您可以创建一个自定义路由,以接受模型的每个属性作为参数,如果它们是简单类型,但只是将值存储在TempData中更清晰。