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

AJAX调用未向Controller传值,Action接收参数为null求助

解决AJAX传值到Controller参数为null的问题

问题原因

你设置了contentType: "application/json"并将数据序列化为JSON字符串,但ASP.NET Core默认不会从JSON请求体中自动绑定多个独立的Action参数,只会绑定到一个模型对象或者通过[FromBody]标记的参数。

解决方案

方案1:创建ViewModel类接收参数(推荐规范写法)

适合参数较多或需要复用的场景:

  1. 定义ViewModel类:
public class ResultViewModel
{
    public int Id { get; set; }
    public string Value { get; set; }
}
  1. 修改Controller的Action,用ViewModel接收并添加[FromBody]特性:
public IActionResult AddResult([FromBody] ResultViewModel model)
{
    if(ModelState.IsValid)
    {
        test.Update(model.Id, model.Value);
    }
    return Json(new { result = true });
}

AJAX代码保持原写法即可。

方案2:给参数添加[FromBody](适合简单场景)

不想创建ViewModel的话,可以用动态对象接收:

public IActionResult AddResult([FromBody] dynamic model)
{
    int id = model.id;
    string value = model.value;
    if(ModelState.IsValid)
    {
        test.Update(id, value);
    }
    return Json(new { result = true });
}

AJAX代码保持不变。

方案3:调整AJAX请求格式(不用JSON序列化)

去掉contentType: "application/json",直接传递普通对象,让jQuery自动编码为表单格式:

$(document).on('click','.btnsubmit', function (e) {
    e.preventDefault();
    var id = parseInt($(this).attr("id"));
    var value=$("#txt_"+id).val();
    $.ajax({
        url: "/Home/AddResult",
        type :"POST",
        async:false,
        data: {id: id, value: value}, // 直接传对象,无需JSON.stringify
        success: function (data) {
            alert("Result Saved");
            console.log(data.result);
        },
        error: function (err) {
            console.error(err);
        }
    })
});

Controller的Action保持原代码即可,ASP.NET Core会自动从表单请求体绑定独立参数。

额外提示

  • 尽量避免使用async:false,同步AJAX会阻塞浏览器主线程,影响用户体验,建议改用异步回调或async/await写法。
  • 可以通过浏览器控制台的Network面板,查看请求的Payload是否正确发送,确认参数名、数据格式与Action参数是否匹配(ASP.NET Core默认支持驼峰/帕斯卡命名的自动映射)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:01:04