You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过AJAX向ASP.NET控制器传递对象数组失败,接收参数为空

解决ASP.NET控制器无法接收AJAX传递的对象数组问题

核心问题及修复步骤

1. 前端postData初始化错误

你当前将postData初始化为对象{},但push是数组专属方法,对象没有该方法,导致构建的数组数据无法正确存入,最终发送的JSON格式不符合后端预期。

修改后的前端代码:

var postData = []; // 改为数组初始化
for (let i=0; i<@Model.Count; i++)
{
    var packageId="#z"+i+"__PackageId";
    var cartItemId="#z"+i+"__CartItemId"; 
    var childId="#childId_"+i; 
    var arobject={
        'PackageId' : $(packageId).val(),
        'CartItemId' : $(cartItemId).val(),
        'ChildId' : $(childId).val(),
    };
    postData.push(arobject);
}

$.ajax({
    type: 'POST',
    contentType: "application/json",
    url: '/cart/CheckEligible',
    data: JSON.stringify(postData),
    success: function (data) {
        // 处理成功逻辑
    }
});

2. 后端控制器参数需添加[FromBody]特性

当请求的contentType为application/json时,ASP.NET默认不会自动从请求体中解析JSON数据到数组类型参数,需要显式添加[FromBody]特性指定数据来源。

修改后的后端控制器代码:

public async Task<JsonResult> CheckEligible([FromBody] CartDropDownV2[] cartItemDto)
{
    // 业务逻辑处理
    return Json(null);
}

额外检查点

  • 确保CartDropDownV2类的属性名称与前端传递的键名完全匹配(包括大小写),例如前端的PackageId对应后端类的public int PackageId { get; set; };若后端使用驼峰命名序列化,可通过[JsonPropertyName("PackageId")]特性手动映射。
  • 确认前端获取的DOM元素值类型与后端属性类型一致(例如数字类型不要传递字符串)。

内容的提问来源于stack exchange,提问作者nnmmss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 17:50:33