我的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
!!
我需要知道:
答案 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) {
.......
}
});