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

ASP.NET插入含子模型列表的主模型时出现400错误

排查AJAX提交含List属性模型时400错误的解决方案

1. 检查请求Content-Type头

AJAX提交JSON时必须明确设置contentType: "application/json; charset=utf-8",否则ASP.NET会默认尝试用表单格式解析请求,无法匹配复杂的List结构,直接返回400错误。

修正后的AJAX示例代码:

$.ajax({
    url: "/Patient/Create",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(patientData),
    success: function(result) {
        // 处理成功逻辑
    },
    error: function(xhr) {
        console.log(xhr.responseText);
    }
});

2. 确保动态输入字段的命名符合Model绑定规则

用PartialView动态添加联系人时,输入字段的name属性必须遵循ASP.NET List绑定格式:Contacts[0].Name、Contacts[1].Phone这类连续索引的命名。如果字段名称是Contacts.Name或索引断号(比如删除中间项后索引不连续),模型绑定会直接失败。

PartialView字段写法示例:

@model ContactModel
<div class="contact-item">
    <input type="text" name="Contacts[@ViewData["Index"]].Name" asp-for="Name" />
    <input type="text" name="Contacts[@ViewData["Index"]].Phone" asp-for="Phone" />
</div>

动态添加时要保证索引连续递增,删除项后建议重新整理索引,避免断号。

3. 检查Model类的验证规则

如果PatientModel或ContactModel中有必填属性未赋值、数据格式不符合验证规则(比如邮箱格式错误、数值超出范围),ASP.NET的ModelState验证会在进入控制器前就返回400。可以在AJAX的error回调中打印响应文本,查看具体验证错误:

error: function(xhr) {
    console.log("验证错误详情:", JSON.parse(xhr.responseText));
}

4. 确认JSON序列化后的结构正确

提交前用console.log(JSON.stringify(patientData))打印序列化后的JSON,确保结构与PatientModel完全匹配。Contacts必须是数组格式,每个元素包含ContactModel的所有属性。

正确的JSON结构示例:

{
    "PatientName": "张三",
    "Age": 30,
    "Contacts": [
        {
            "Name": "李四",
            "Phone": "13800138000"
        },
        {
            "Name": "王五",
            "Phone": "13900139000"
        }
    ]
}

5. 检查控制器Action的参数定义

Create接口的参数必须添加[FromBody]特性,告诉ASP.NET从请求体的JSON中绑定模型。如果缺少该特性,默认会从表单数据绑定,导致无法解析JSON,直接返回400。

控制器代码示例:

[HttpPost]
public IActionResult Create([FromBody] PatientModel model)
{
    if (ModelState.IsValid)
    {
        // 业务处理逻辑
        return Ok();
    }
    return BadRequest(ModelState);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:07:07