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

ASP.NET MVC控制器无法接收AJAX GET请求传递的projectId数据

问题分析与解决

核心问题原因

  • GET请求不支持[FromBody]:HTTP GET请求不会携带请求体(Request Body),控制器里的[FromBody]属性用于从请求体解析参数,在GET方法中完全无效,这是projectId始终为null的直接原因。
  • 无效的contentType配置:AJAX里设置的contentType: "application/json; charset=utf-8"对GET请求无意义,因为GET参数是通过URL查询字符串传递的,该配置反而可能干扰参数解析。
  • 异步返回值问题(附加):当前函数直接return projectName会返回初始空字符串,因为AJAX是异步操作,success回调还未执行就已返回结果。

解决方案

1. 修正控制器方法

移除[FromBody]属性,且由于projectId是数字类型,建议将参数类型从string改为int(贴合实际数据类型,避免不必要的类型转换):

[HttpGet]
public JsonResult GetSubProjName(int projectId)
{
    // 业务逻辑代码
    return Json("实际子项目名称"); // 返回处理后的结果
}

2. 修正AJAX请求代码

删除无效的contentType配置,同时解决异步返回值问题(以下提供两种实现方式):

方式一:使用回调函数
function getSubProjName(projectId, callback) {
    console.log(projectId);
    $.ajax({
        type: 'GET',
        url: '@Url.Action("GetSubProjName", "Home")',
        data: { projectId: projectId },
        dataType: "json",
        success: function (response) {
            console.log(response);
            callback(response);
        },
        error: function (response) {
            console.log(response);
            callback(null); // 错误时返回null或自定义错误信息
        }
    });
}

// 调用示例
getSubProjName(123, function(projectName) {
    if (projectName) {
        // 获取结果后的业务逻辑
        console.log("子项目名称:", projectName);
    }
});
方式二:使用Promise(现代异步处理方式)
function getSubProjName(projectId) {
    console.log(projectId);
    return new Promise((resolve, reject) => {
        $.ajax({
            type: 'GET',
            url: '@Url.Action("GetSubProjName", "Home")',
            data: { projectId: projectId },
            dataType: "json",
            success: function (response) {
                console.log(response);
                resolve(response);
            },
            error: function (response) {
                console.log(response);
                reject(response);
            }
        });
    });
}

// 调用示例
getSubProjName(123)
    .then(projectName => {
        console.log("子项目名称:", projectName);
    })
    .catch(error => {
        console.error("请求失败:", error);
    });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:20:37