为什么这些数据没有从jQuery AJAX帖子传递到ASP.Net MVC

时间:2011-12-08 16:56:01

标签: jquery asp.net-mvc ajax

我有从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;
}

1 个答案:

答案 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标记。