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

AJAX提交表单后Controller中参数值为Null的问题求助

排查与解决步骤

1. 修正AJAX的processData配置

你的AJAX代码里设置了processData: false,但$('#r6_FormEditServiceParameters').serialize()已经把表单数据转换成了application/x-www-form-urlencoded格式的字符串。processData: false会阻止jQuery将数据处理成适合发送的格式,直接导致后端无法正确解析参数。
删掉这行代码即可(默认值为true,无需额外设置):

$.ajax({
  url: $('#r6_FormEditServiceParameters').attr('data-ajax-url'),
  dataType: "json",
  data: data,
  type: "POST",
  contentType: "application/x-www-form-urlencoded; charset=UTF-8",
  success: function (ret) {
    // Handle success
  }
});

2. 检查表单字段命名与模型属性的匹配

ASP.NET模型绑定依赖字段名称与模型属性完全一致,尤其是嵌套集合类的字段,必须遵循索引式命名规则:

  • 基础属性:对应RubricId的input字段name需设为RubricId
  • 嵌套集合:比如Parameters列表中第一个元素的Name属性,input字段name要写成Parameters[0].Name,第二个元素对应Parameters[1].Name,以此类推
  • 字符串集合ServiceToDuplicate:可以用多个同名name="ServiceToDuplicate"的input,或按ServiceToDuplicate[]命名(取决于框架版本)

打开浏览器开发者工具(F12),在Network标签下查看请求的Form Data,确认每个字段的命名是否符合模型绑定要求。

3. 确认Controller Action的配置

  • 确保Action方法标记了[HttpPost]特性,明确接受POST请求
  • 如果是ASP.NET Core,复杂模型参数前需添加[FromForm]特性(匹配你使用的application/x-www-form-urlencoded格式):
[HttpPost]
public IActionResult YourActionName([FromForm] ParameterRubricModel model)
{
    // 业务逻辑
}
  • 检查所有模型类(包括嵌套的ServiceParameterModel、TreeViewItem)是否存在无参构造函数,模型绑定必须通过无参构造函数创建实例。

4. 验证模型绑定状态

在Action中检查ModelState.IsValid,如果返回false,查看ModelState.Values中的错误信息,这些信息会直接告诉你哪些字段绑定失败(比如类型不匹配、必填项缺失等):

[HttpPost]
public IActionResult YourActionName([FromForm] ParameterRubricModel model)
{
    if (!ModelState.IsValid)
    {
        var errors = ModelState.Values.SelectMany(v => v.Errors);
        // 输出或返回错误信息用于排查
    }
    // 正常业务逻辑
}

5. 核对请求内容类型

确认请求头中的Content-Type与你设置的application/x-www-form-urlencoded; charset=UTF-8一致,避免因内容类型不匹配导致后端无法解析数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:05:17