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

无法通过jQuery AJAX向C# MVC传递对象,控制器接收值为空求助

解决jQuery AJAX传递对象到C# MVC控制器属性为空的问题

我来帮你搞定这个困扰!你遇到的核心问题是AJAX请求的数据格式和声明的Content-Type不匹配,再加上控制器参数缺少必要的绑定特性,导致MVC无法正确解析你的Order对象。

问题根源分析

  1. 你设置了contentType: "application/json",这意味着服务器期望接收JSON格式的字符串,但你直接传递了JavaScript对象order——jQuery会默认把对象编码成表单格式(application/x-www-form-urlencoded),和你声明的Content-Type冲突,服务器自然无法解析成Order对象。
  2. ASP.NET MVC需要明确告知从请求体中读取数据,否则会默认从URL参数或表单数据中绑定,这就需要用到[FromBody]特性。

修正方案

1. 修改JavaScript代码:将对象转为JSON字符串

在AJAX的data参数中,用JSON.stringify()把Order对象转换成JSON字符串,确保发送的数据格式和Content-Type一致:

function Order() { 
  this.Partner; 
  this.OrderID; 
  this.TypeOfOrder; 
  this.SubmittedBy; 
  this.CompanyID; 
  this.CompanyName; 
} 

jQuery('button[type="submit"]').click(function (event) { 
  event.preventDefault(); 
  var order = new Order(); 
  order.Partner = "ABC"; // 修正语法:把逗号改为分号
  order.OrderID = "123"; 
  order.TypeOfOrder = "Website"; 
  console.log(order); 

  jQuery.ajax({ 
    url: "/my-route", 
    type: "POST", 
    dataType: 'json', 
    contentType: "application/json", 
    data: JSON.stringify(order), // 关键:转换为JSON字符串
    success: function (data) { 
      console.log(data); 
    }, 
    failure: function (response) { 
      console.log("ERROR!"); 
    } 
  }); 
})

2. 修改C#控制器:添加[FromBody]特性

给控制器的Order参数加上[FromBody],告诉框架从请求体中读取JSON数据并绑定到对象上:

// POST my-route
[HttpPost]
public Order Post([FromBody] Order order) // 添加[FromBody]特性
{
    return order;
}

你的C# Model部分是正确的,不需要修改。

验证效果

修改完成后,再次点击提交按钮,控制台应该会返回带有正确属性值的Order对象,控制器接收的参数也不会再是空值啦!

内容的提问来源于stack exchange,提问作者friday-json

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:24:02