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

如何通过Ajax向分部视图控制器方法传递ID并解决参数为空问题

问题根本原因

你当前的AJAX请求以application/json格式提交JSON数据,但ASP.NET Core默认不会从POST请求的Body中解析简单类型参数(比如string类型的id),必须显式配置才能读取,所以控制器拿到的id是null。
你直接在地址栏访问是GET请求,参数走路由绑定,所以可以正常拿到值,和当前POST请求的绑定逻辑不同。

解决方案(二选一即可)

方案1:修改AJAX请求代码(推荐,改动最小)

不需要序列化JSON,直接传递JS对象,让jQuery默认以application/x-www-form-urlencoded格式提交,控制器可以直接绑定参数:

$(function () {
    setInterval(RefreshAgenda, 3000);
});

function RefreshAgenda() {
    var data = {"id":"@Model.Id"};
    $.ajax({
        type: "POST",
        url: "/Meetings/AgendaPartial",
        data: data,
        dataType: "html",
        success: function (response) {
            $('#_Agenda').html(response);
        }
    });
}

方案2:修改后端绑定逻辑,保留JSON提交方式

如果确实需要保留JSON提交的逻辑,有两种改法可选:

  • 方式A:给控制器参数加[FromBody]注解,同时把AJAX请求的data直接改为id值,不需要外层对象:
    // AJAX部分修改
    data: JSON.stringify("@Model.Id"),
    
    // 控制器部分修改
    [HttpPost]
    public async Task<IActionResult> AgendaPartial([FromBody] string id)
    
  • 方式B:定义简单的接收模型,用对象接收JSON参数:
    // 新增模型类
    public class AgendaRequest
    {
        public string Id { get; set; }
    }
    
    // 控制器部分修改
    [HttpPost]
    public async Task<IActionResult> AgendaPartial([FromBody] AgendaRequest request)
    {
        string id = request.Id;
        // 原有逻辑不变
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:09:02