在ajax调用之后,在服务器端获取null参数

时间:2015-11-24 09:04:06

标签: c# jquery asp.net .net asp.net-web-api

我的ASP.Net WebApi应用程序中存在一个奇怪的问题。我有这个客户端代码:

 var arr = [];
for (var i = 0; i < checkarray.length; i++) {
    if (checkarray[i] == 1) arr.push(ids[i]);
}
console.log(arr);
$.ajax({
    type: "post",
    async: false,
    url: "/api/Demande/ReservationAgendaByDrivers", 
    data: arr,
    success: function (data) {
        // ...
    }
});

在服务器端:

[HttpPost]
public IEnumerable<ReservationModel> ReservationAgendaByDrivers(int[]  tab)
{
    List<ReservationModel> outlst = new List<ReservationModel>();
    List<ReservationModel> model = GetListReservation().ToList();
    foreach (ReservationModel item in model)
    {
        if (!item.id_chauffeur.HasValue) 
            continue;

        if (tab.Contains(item.id_chauffeur.Value)) 
            outlst.Add(item);
    }
    return outlst.OrderByDescending(x => x.id_demande);
}

例如,我在浏览器中输出了这个数组:

[7, 5, 1]

但服务器端的tab参数始终为null !!

我需要知道:

  1. 出现此错误的原因是什么?
  2. 如何修复我的代码?

4 个答案:

答案 0 :(得分:2)

要使ModelBinder正常工作,您需要在tab属性下的对象中提供数组。您还应该移除async: false,因为它是难以言喻的不良做法才能使用它。

$.ajax({
    type: "post",
    url: "/api/Demande/ReservationAgendaByDrivers", 
    data: {
        tab: arr
    },
    success: function (data) {
        // handle the response here...
    }
});

答案 1 :(得分:2)

出现此错误的原因是什么?

int[] tab期待名为tab的params中的var,因为您尝试发送数组arr,因此不存在。

如何修复我的代码?

在数据中发送对象:

data: { tab: arr }, // here tab is the key which belongs to int[] tab at backend

async:false不是将其设置为false的好选择。这不应该用于将其设置为false,因为有方法可以使用promises正确执行操作。

答案 2 :(得分:1)

console.log(arr);
$.ajax({
    type: "post",
    url: "/api/Demande/ReservationAgendaByDrivers", 
    data:{tab:arr},
    success: function (data) {
   .............
                             }});

答案 3 :(得分:0)

谢谢大家,

我通过编辑我的代码修复了我的代码:

$.ajax({
        type: "post",
        async:false,
        url: "/api/Demande/ReservationAgendaByDrivers",
        data: JSON.stringify(arr), 
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
        .......
                                 }
       });