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

Asp.net Core 6 MVC视图传对象列表到控制器为空求助

排查AJAX传参控制器接收为空的问题

以下是针对你的代码的具体排查和修复方案:

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

ASP.NET Core默认不会自动从请求体的JSON中绑定复杂对象,必须显式添加[FromBody]特性,告诉框架从JSON请求体读取数据:

[HttpPost] // 确保标记为POST请求
public JsonResult SaveOrderw([FromBody] POHeaderViewModel objPOHeaderViewModel)
{
    return Json(data: "Successfully added.");
}

2. 初始化模型中的集合属性

你的POHeaderViewModel里的Polines是List<POLineViewModel>,没有默认初始化,绑定框架无法自动创建集合实例,会导致绑定失败。修改模型类:

public class POHeaderViewModel
{
    // 其他属性保持不变
    public List<POLineViewModel> Polines { get; set; } = new List<POLineViewModel>(); // 添加默认初始化
}

3. 修正JavaScript中明细行的字段取值错误

你当前代码里,POLineViewModel的Rate、Qty、Disc、SubTotal都从同一个td:eq(7)取值,这会导致所有数值字段取到相同值,若单元格内容非数字,parseFloat会返回NaN,而decimal类型无法绑定NaN,最终导致整个模型绑定失败。

假设表格各字段对应不同列索引,修正后的循环代码:

$('#tblPOLine').find('tr:gt(0)').each(function () {
    var POLineViewModel = {};
    POLineViewModel.ItmId = $(this).find('td:eq(2)').text().trim(); // 去除空格避免空值问题
    POLineViewModel.Code = $(this).find('td:eq(2)').text().trim();
    POLineViewModel.UOM = $(this).find('td:eq(3)').text().trim();
    POLineViewModel.Rate = parseFloat($(this).find('td:eq(5)').text()) || 0; // 空值时默认设为0
    POLineViewModel.Qty = parseFloat($(this).find('td:eq(4)').text()) || 0;
    POLineViewModel.Disc = parseFloat($(this).find('td:eq(6)').text()) || 0;
    POLineViewModel.SubTotal = parseFloat($(this).find('td:eq(7)').text()) || 0;
    ListofPOLineViewModel.push(POLineViewModel);
});

4. 清理AJAX请求中的重复配置

你的AJAX代码重复写了两次contentType,建议保留一次标准配置:

$.ajax({
    async: true,
    type: 'POST',
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(objPOHeaderViewModel),
    dataType: "json",
    url: '/PONew/SaveOrderw',
    success: function (data) {
        alert(data);
    },
    error: function (xhr) {
        console.log(xhr.responseText); // 打印错误详情辅助排查
        alert("Error occurred.");
    }
});

5. 验证请求数据格式

在JSON.stringify之前打印对象结构,确认数据是否正确:

console.log(objPOHeaderViewModel); // 检查字段和对应值是否符合预期

完成以上修改后,重新测试,控制器即可正常接收参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:28:16