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

MVC架构下客户端到服务端对象列表映射属性为空问题求助

解决MVC中客户端列表映射到服务端属性为空的问题

嘿,我之前也踩过MVC模型绑定的这个坑,你的情况大概率是模型绑定器没法正确解析前端传的数据结构,咱们一步步来搞定:

1. 修正AJAX请求的内容类型与数据格式

jQuery默认会把对象转成application/x-www-form-urlencoded格式的表单数据,但MVC处理复杂列表时,用application/json格式更稳妥。你需要给AJAX请求加上两个关键配置:

  • 指定contentType为JSON类型
  • 用JSON.stringify()把数组转成标准JSON字符串

修改后的代码示例:

var listCAORAS = [];
$('span.chkDelete input[type=checkbox]:checked').each(function (i, obj) {
    var iORAS_KEY = $(obj).parent().attr('data-ioras_key');
    if (iORAS_KEY) {
        listCAORAS.push({ "iORAS_KEY": Number(iORAS_KEY) });
    }
});

$.ajax({
    method: 'post',
    url: '/OrderSupplier/DeleteSelected', // 补全你的完整接口地址
    contentType: 'application/json; charset=utf-8', // 关键:告诉后端这是JSON数据
    data: JSON.stringify(listCAORAS), // 把数组序列化为JSON字符串
    success: function(response) {
        // 这里写你的成功回调逻辑
    },
    error: function(xhr) {
        // 可选:处理请求失败的情况
    }
});

2. 确保后端模型与前端字段匹配

MVC的模型绑定器默认大小写不敏感,但为了避免意外,最好保证后端模型的属性名和前端传的键完全一致。比如你的后端模型应该是这样:

public class CAORASItem
{
    public int iORAS_KEY { get; set; } // 属性名要和前端的"iORAS_KEY"对应
}

对应的Action方法要接收这个模型的列表:

[HttpPost]
public ActionResult DeleteSelected(List<CAORASItem> listCAORAS)
{
    // 现在listCAORAS里的每个项应该都能正确拿到iORAS_KEY的值了
    // 你的业务逻辑代码...
    return Json(new { Success = true });
}

3. 验证请求数据是否正确

打开浏览器开发者工具(F12),切换到「Network」标签,找到这个AJAX请求,查看「Request Payload」:

  • 正常的JSON格式应该是:[{"iORAS_KEY":1},{"iORAS_KEY":2}]
  • 如果看到的是类似listCAORAS[0][iORAS_KEY]=1&listCAORAS[1][iORAS_KEY]=2的表单编码格式,说明你没加contentType和JSON.stringify(),这种格式绑定列表需要特定的索引规则,远不如JSON省心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:41:56