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

ASP.NET MVC 5 提交主从视图到Controller时子集合绑定为null问题求助

问题根因
  • 提交JSON时没有指定请求的contentType为application/json,服务端模型绑定器无法正确识别JSON格式的请求体
  • 前端提交的明细对象属性名与C#类定义不匹配:CustomerOrderDetail类中商品属性名为prod,你前端传的是Product.ProductID,属性名不匹配导致绑定失败
  • 原jQuery选择器存在语法错误:$('table tbody tr)')多了一个多余的右括号,可能导致明细收集不完整
  • 大概率漏了在提交前调用CollectDetail方法,导致listDetail始终是空数组
解决方案

1. 修正Controller代码

给Action参数加上[FromBody]特性,指示模型绑定器从请求体中读取JSON数据进行绑定:

// ASP.NET Core必须加该特性,ASP.NET Framework环境可跳过
public ActionResult Create([FromBody] CustomerOrder data) { }

2. 修正前端JS代码

var listDetail = [];
function CollectDetail()
{
    listDetail = []; // 每次收集前清空列表,避免重复追加旧数据
    // 修正选择器语法错误
    $('table tbody tr').each(function (idx, item) {
            listDetail.push({
                // 匹配C#类中的属性名prod
                "prod.ProductID": $('select[name="Product.ProductID"]', this).val(),
                "Qty": parseInt($('input[name="Qty"]', this).val()), // 显式转数值避免绑定失败
                "Price": parseFloat($('input[name="Price"]', this).val()) // 显式转数值避免绑定失败
        });
    });
}
function Submit()
{
    CollectDetail(); // 提交前必须调用明细收集方法
    var datas = {
        "CustomerID": $('#customerID').val(),
        "VBranch.BranchCode": $('#VBranch_BranchCode').val(),
        "TransDate": moment($('#TransDate').val(), "DD/MMM/YYYY").format("YYYY-MM-DD"),
        "OrderDetails": listDetail
    };

        $.ajax({
            type: "POST",
            dataType: 'JSON',
            // 新增指定请求内容类型为JSON
            contentType: 'application/json; charset=utf-8',
            data: JSON.stringify(datas),
            url: '@Url.Action("Create", "CustomerOrder")',
            success: function (result) {
                alert('Success');
            },
            error: function (status, xhr, tokek) {
                console.log(status.responseText);
                alert('Failed');
            }
        });
}
额外排查点

如果修改后还是绑定失败,可以检查以下内容:

  • 确认Product类中的ProductID属性名拼写正确,和前端提交的一致
  • 确认明细条目的Qty和Price没有传入空值、非数字格式的内容,避免类型不匹配导致整条明细绑定失效
  • 如果不想用JSON提交,也可以去掉JSON.stringify和contentType配置,直接传入datas对象,用默认的表单格式提交也可以正常绑定

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:48:03