【问题标题】:Array posted as null数组发布为空
【发布时间】:2018-07-04 09:35:15
【问题描述】:

我知道这个问题在 SO 中有一些已经回答的替代方案,但这些解决方案都没有对我有用。

我有一个整数数组,我想通过AJAXPOST 传递给一个方法。但不知何故,控制器中的参数总是null

这是我的JS

function addSelected(cID, pID) {
    var id, idList = [];
    $("#FilteredCategory_" + pID + "_" + cID + " .content ul li a").each(function () {
        id = parseInt(this.className.replace(/[^0-9]/gi, ''), 10);
        idList.push(id);
    });
    $.ajax('@Url.Action("SelectedAdd","Home")', {
        type: "POST",
        traditional: true,
        data: idList,
        success: function (data) {
            alert(data);
        }
    });
}

POST 控制器中的方法:

[HttpPost]
public string SelectedAdd(ICollection<int> topicIds)
{
    string res = string.Empty;
    foreach (var id in topicIds)
    {
        res += $"Item in list: '{id}' \n ";
    }
    return res;
}

任何建议,为什么topicIds 总是nul

【问题讨论】:

  • 请访问help center,使用tour查看内容和How to Ask。做一些研究,搜索关于 SO 的相关主题;如果您遇到困难,请发布您的尝试minimal reproducible example,并注明输入和预期输出。
  • 显示相关的 HTML - 点击&lt;&gt; sn-p 编辑器,给我们一个真实的例子。任何控制台错误?控制台记录 idList
  • 只是因为你在ajax请求中的参数和c#的方法不一样。从data: idList 更改为data: {topicIds: idList }

标签: jquery ajax asp.net-mvc-4


【解决方案1】:

您需要传递与您的方法中的参数名称匹配的名称/值对。将ajax调用改为

$.ajax('@Url.Action("SelectedAdd","Home")', {
    type: "POST",
    traditional: true,
    data: { topicIds: idList }, // change
    success: function (data) {
        alert(data);
    }
});

【讨论】:

  • 多么愚蠢的错误。谢谢。如果我有多个参数,我应该通过逗号分隔的名称/值对来提及它们吗?
  • 是的(只要它们是简单的属性 - 否则您需要对数据进行字符串化并将 contentType 设置为 application/json) - 例如data: { id: someValue, topicIds: idList },
猜你喜欢
  • 1970-01-01
  • 2018-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
  • 2021-06-26
  • 2021-11-28
相关资源
最近更新 更多