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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:05:25