我已经尝试了 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 的值时会发生同样的事情。
尽量使用默认的
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
}
}
我已经尝试了 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 }