为什么此列表<int>没有作为空列表或 NULL 传递给控制器?



我正在通过Ajax调用将id列表传递给我的。net MVC项目中的控制器方法。

但有时没有id要传递,所以我想传递一个空列表或null。

然而,它传递的不是一个空列表或null,而是一个ID为0的list。

这是我的控制器方法:
public ActionResult MultipleDaysModal(List<int> IDs)
{
if (IDs.Any())
{
ViewBag.CurrentDays = ReservationHelper.GetBlockoutsByIDs(IDs)
.OrderBy(i => i.BlockoutTime1)
.ToList();
}
return View("ReservationPartials/_MultipleDaysModal");
}
下面是我对Ajax方法的第一次尝试:
function loadMultipleDays() {
var blockoutIDString = $('#blockoutIDs').val();
// had to split, otherwise the controller didn't recognize it as a list of ints
var blockoutIDs = blockoutIDString.split(',');
$.ajax({
url: '@Url.Action("MultipleDaysModal", "Reservations")',
method: 'GET',
traditional: true,
data: { 'IDs': blockoutIDs },
success: function (data) {
// Do stuff
},
error: function (xhr) {
// DO stuff
}
});
}

当我遇到非空列表的问题时,我试图强制它为空:

function loadMultipleDays() {
var blockoutIDString = $('#blockoutIDs').val();
// had to split, otherwise the controller didn't recognize it as a list of ints
var blockoutIDs = blockoutIDString ? blockoutIDString.split(',') : null;
// Ajax call . . .
}

然而,我仍然得到了相同的列表,单个ID为0。这绕过了我的id检查。any ()我知道我可以改变if语句以不同的方式检查,但是我想了解为什么会发生这种情况。

编辑:当我通过devtools中的javascript步骤时,变量blockoutIDs实际上被设置为null(因为我目前有第二次尝试运行)。当查看请求时,查询字符串参数显示'IDs='和JSON 'IDs:',所以没有。

我认为你应该这样做。如果没有标识符,就不要发送有效载荷

var blockoutIDString = $('#blockoutIDs').val();
var data = blockoutIDString 
? { 'IDs': blockoutIDString.split(',') } 
: null
$.ajax({
url: '@Url.Action("MultipleDaysModal", "Reservations")',
method: 'GET',
traditional: true,
data: data,
success: function (data) {
// Do stuff
},
error: function (xhr) {
// DO stuff
}
});

最新更新