AJAX 方法不会将参数传递给控制器 (C#)

问题描述 投票:0回答:2

我已经尝试了 10 种解决方案来使其工作,但没有帮助。我正在尝试将参数发送到 C# 控制器,但每次我在控制器端的参数都显示 null 值。这是我的代码:

 function createObject(x) {
        var obj = {};
        obj.Name = x;

    $.ajax({
        type: "POST",
        url: "/Home/Tire",
        data: JSON.stringify(obj),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: OnSuccess,
        failure: function (response) {
            //failure  message
        }
    });
    function OnSuccess(response) {
        //do your stuff after success response
    }

}

控制器来了:

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

当我尝试仅传递 x 的值时会发生同样的事情。

c# asp.net .net ajax asp.net-ajax
2个回答
0
投票

尽量使用默认的

contentType
,什么是
"application/x-www-form-urlencoded; charset=UTF-8"
.

因为你只传递一个参数

Name
你可以简化
data
参数:

function createObject(x) {     
    $.ajax({
        type: "POST",
        url: "/Home/Tire",       
        data: { name: x },
        dataType: "json",
        success: OnSuccess,
        failure: function (response) {
            //failure  message
        }
    });
    function OnSuccess(response) {
        //do your stuff after success response
    }
}

0
投票

我已经尝试了 10 种解决方案来使其工作,但没有帮助。 我正在尝试将参数发送到 C# 控制器,但每次我 控制器端的参数显示为空值。

实际上,您得到的预期结果是控制器中的空值,因为根据您的场景,您有两个选择。或者,修改您的 asp.net 核心控制器代码或查看 javascript 代码。

方式:1 : 如果修改控制器代码:

如果你想在那种情况下保持你的 javascript 代码,你需要更新你的控制器代码,你需要引入 [FromBody] 属性和一个自定义类,这将在你的控制器中获得预期的结果:

型号:

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

控制器:

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

景色:

注意: 通过这种方式,无需在您的视图或 javascript 代码段中更改任何内容。

输出:

方式:2 : 修改javascript代码:

在这种情况下,您需要在 jsvascript 代码中修改一些内容。您需要从您的请求中删除

contentType: "application/json; charset=utf-8",
部分,这将实现默认请求格式,即
application/x-www-form-urlencoded

然后在请求的数据属性中传递对象,然后传递控制器参数。如下:

 data: { YourControlleParameter: YourObjecet}

在你的场景中:

data: { name: x }
© www.soinside.com 2019 - 2024. All rights reserved.