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

AJAX方法无法向C#控制器传递参数,参数始终为null

问题原因

你当前代码的问题在于:当通过JSON.stringify发送JSON格式请求体时,ASP.NET MVC默认的模型绑定不会将JSON对象中的属性直接映射到单个字符串参数上。控制器的string Name参数默认会从表单数据、路由或查询字符串中取值,而不会解析请求体里的JSON对象。

解决方案

以下几种方法都可以解决这个问题,选适合你的即可:

方法1:创建模型类配合[FromBody]

先定义一个与JSON结构匹配的模型类:

public class TireRequestModel
{
    public string Name { get; set; }
}

然后修改控制器方法,用[FromBody]标记模型参数,让框架从JSON请求体中绑定数据:

[HttpPost]
public ActionResult Tire([FromBody] TireRequestModel request)
{
    string p = request.Name;
    return View("Tires");
}

JS代码不需要修改,保持原来的JSON.stringify和contentType设置即可。

方法2:直接发送表单格式数据

如果你不想创建模型类,可以修改AJAX请求,直接发送表单编码格式的数据,这样控制器的单个参数能直接被绑定:

function createObject(x) {
    $.ajax({
        type: "POST",
        url: "/Home/Tire",
        data: { Name: x }, // 直接传键值对,无需JSON.stringify
        dataType: "json",
        success: OnSuccess,
        failure: function (response) {
            //failure message
        }
    });
    function OnSuccess(response) {
        //do your stuff after success response
    }
}

控制器代码保持不变即可,因为默认的模型绑定会解析表单格式的Name=x数据。

方法3:用JObject接收JSON数据

如果不想创建模型类,也可以用JObject直接读取JSON请求体中的属性:

using Newtonsoft.Json.Linq;

[HttpPost]
public ActionResult Tire([FromBody] JObject jsonData)
{
    string p = jsonData["Name"].ToString();
    return View("Tires");
}

JS代码同样不需要修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 00:45:24