ASP.NET MVC中Ajax请求参数全部为null的问题排查求助
解决方案
问题根源
你当前的Action方法用多个独立参数接收数据,但前端发送的是单个JSON对象,ASP.NET MVC默认模型绑定无法将整体JSON拆分映射到零散参数上,导致所有参数为null。另外前端ItemID和Amount是字符串类型,后端对应int类型,也可能存在类型转换匹配问题。
具体解决步骤
1. 创建匹配的数据模型类
新建一个ViewModel类,完全对应前端传递的JSON结构:
public class VariantUpdateViewModel { public string TitleEn { get; set; } public string TitleAr { get; set; } public int ItemID { get; set; } public List<ItemVariant> Data { get; set; } // MVC模型绑定不区分大小写,可匹配前端的"data"字段 } // 确保ItemVariant类属性与前端字段一致 public class ItemVariant { public int ItemVariantID { get; set; } public string NameEn { get; set; } public string NameAr { get; set; } public int Amount { get; set; } // 前端传字符串"10"时,MVC会自动转换为int;若需兼容可改为string后自行处理 }
2. 修改Action方法参数
将原有的多个参数替换为上面的ViewModel:
public PartialViewResult SaveUpdateVariants(VariantUpdateViewModel model) { // 直接通过model.TitleEn、model.ItemID、model.Data访问接收的数据 }
3. 前端代码优化(可选)
去掉重复的method和type配置(两者作用一致,保留一个即可),保持代码简洁:
$.ajax({ url: '/Inventory/SaveUpdateVariants', contentType: 'application/json; charset=utf-8', data: JSON.stringify(update), type: "POST", success: result => { gotoOptions(); $("#variant-table tbody").replaceWith(result); window['variant-table'].refresh(); } });
额外注意点
- 若前端
ItemID无法改为数字类型,可将ViewModel中的ItemID改为string,在Action内自行转换为int。 - 确保
ItemVariant类存在无参构造函数(MVC模型绑定必须)。
内容的提问来源于stack exchange,提问作者Faizan Naeem
相关产品推荐
相关产品推荐

