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

ASP.NET Core中AJAX传值控制器仅接收一个属性另一个为null

问题解决方案

可能的原因及修复步骤

1. 修正AJAX数据的属性名与模型匹配

你AJAX里viewmodel的pin是小写,而模型类StockTransferToRetailerVMList的对应属性是Pin(首字母大写)。虽然ASP.NET Core模型绑定默认支持大小写不敏感,但严格匹配属性名能避免潜在的绑定异常。同时注意补充AJAX代码中缺失的对象闭合大括号,修正拼写错误:

var viewmodel = {
    "Pin": $(".password").val(), // 改为与模型一致的首字母大写Pin
    "STRetailerVMList": STRetailerVMList
}; // 补充缺失的闭合大括号
var url = '@Url.Action("StockTransferToRetailer", "Create")';

$.ajax({
    url: url,
    type: "POST",
    data: JSON.stringify(viewmodel),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    beforeSend: function () {
        return confirm("Please confirm to transfer?"); // 修正拼写错误confrim→confirm
    },
});

2. 为控制器参数添加[FromBody]特性

由于你发送的是JSON格式的请求体,需要明确告诉ASP.NET Core从请求体中绑定模型。修改控制器方法:

[HttpPost]
public JsonResult Create([FromBody] StockTransferToRetailerVMList viewmodel)
{
    return Json(new { });
}

3. 检查子模型的可绑定性

确保StockTransferRetailerViewModel的所有需要绑定的属性都是public访问修饰符,且属性名与AJAX中传递的子对象属性名完全匹配(包括大小写)。例如子模型定义需符合如下格式:

public class StockTransferRetailerViewModel
{
    public int Id { get; set; }
    public string ProductName { get; set; }
    // 其他需要绑定的属性
}

对应的AJAX中STRetailerVMList数组里的每个对象属性名要与子模型一致,比如{"Id": 1, "ProductName": "Sample"}。

4. 验证请求的JSON格式

可以在AJAX代码中添加日志打印,确认生成的JSON结构是否正确:

console.log(JSON.stringify(viewmodel));

通过浏览器控制台查看输出,确认STRetailerVMList是有效的数组格式,没有语法错误。

内容的提问来源于stack exchange,提问作者Mithun Chandra Howlader

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:05:12