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

