通过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
相关产品推荐
相关产品推荐

