JQuery Ajax无法向Action方法传递数据的问题求助
解决AJAX无法传递数据到后端Action的问题
问题原因
你设置了contentType: "application/json; charset=utf-8",但直接传递普通JavaScript对象作为data参数时,jQuery不会自动将其序列化为JSON字符串,而是会按表单格式编码发送,导致后端无法解析JSON格式的数据,最终接收为空。
解决方案
方案一:以JSON字符串格式发送数据
修改AJAX请求的data部分,用JSON.stringify()将对象转为JSON字符串:
function SendMessage(contactId, e) { e.preventDefault(); var content = $("#text").val(); const dataObject = { contactId: contactId, content: content } console.log(dataObject) $.ajax({ url: "/Admin/Contact/Reply", type: "POST", data: JSON.stringify(dataObject), // 转为JSON字符串 contentType: "application/json; charset=utf-8", dataType: "json", success: function (res) { if (res != null) { Swal.fire( 'Sent successfully!', '', 'success' ) } } }) }
后端Action需要添加[FromBody]特性来接收JSON格式的数据:
[HttpPost] public IActionResult Reply([FromBody] ReplyModel model) { // 业务逻辑处理 } // 对应的模型类 public class ReplyModel { public int ContactId { get; set; } public string Content { get; set; } }
注意:模型类的属性名要和前端dataObject的键名匹配(可通过JSON序列化配置忽略大小写)。
方案二:以表单格式发送数据
如果不需要JSON格式,可移除contentType配置(jQuery默认使用application/x-www-form-urlencoded),直接传递对象:
function SendMessage(contactId, e) { e.preventDefault(); var content = $("#text").val(); const dataObject = { contactId: contactId, content: content } console.log(dataObject) $.ajax({ url: "/Admin/Contact/Reply", type: "POST", data: dataObject, // jQuery自动转为表单格式 dataType: "json", success: function (res) { if (res != null) { Swal.fire( 'Sent successfully!', '', 'success' ) } } }) }
后端Action无需[FromBody],可直接用参数或模型接收:
// 方式1:直接用参数接收 [HttpPost] public IActionResult Reply(int contactId, string content) { // 业务逻辑处理 } // 方式2:用模型类接收 [HttpPost] public IActionResult Reply(ReplyModel model) { // 业务逻辑处理 }
额外检查点
- 确认后端路由
/Admin/Contact/Reply对应正确的控制器和Action方法。 - 检查控制台打印的
dataObject中contactId和content是否有有效值。 - 确保后端模型类的属性名与前端键名一致,或配置JSON序列化忽略大小写。
内容的提问来源于stack exchange,提问作者Ilkin Rufullayev
相关产品推荐
相关产品推荐

