我有从jQuery传递到我的ASP.Net MVC控制器的代码,它工作正常。我现在正尝试在新情况下复制相同的功能,当我在控制器代码中放置断点时,参数显示为null
。
任何人都可以看到下面的代码有任何问题。在firebug中,我看到calendarIds
是一个完全填充的数组,但它在服务器端显示为null。
这是我的jQuery代码:
var calendarIds = [];
$('#box2View option').each(function () {
calendarIds.push($(this).val());
});
$.post(
'/EventCalendar/UpdateVisibleCalendars/',
{ calendarIds: calendarIds },
function (data) {
//do some callback stuff here (not relevant for question)
},
"html"
);
这是我的控制器代码
public ActionResult UpdateVisibleCalendars(int[] calendarIds)
{
// right here i check calendarIds and its always NULL :(
return null;
}
答案 0 :(得分:2)
使用$.ajax()
可以将traditional
标志设置为true:
$.ajax({
url: '/EventCalendar/UpdateVisibleCalendars/',
type: 'POST',
traditional: true,
data: { calendarIds: calendarIds },
dataType: 'html',
success: function (data) {
}
});
现在POST主体将如下所示:
calendarIds=1&calendarIds=2&calendarIds=3
使用tgraditional=false
(这是从jQuery 1.4开始的默认设置),POST主体看起来像这样:
calendarIds[]=1&calendarIds[]=2&calendarIds[]=3
通过咨询this blog post,您将了解只有第一个与默认模型装订器兼容。
$.param()
部分详细解释了jQuery的traditional
标记。