来自 ajax 调用的值在 MVC 操作中始终为 false
Value from ajax call always false in MVC action
为什么我的 MVC 操作 (ASP.NET Core 1.1) 总是显示此代码的值 false:
$.ajax({
url: "/home/SetValue",
type: "post",
dataType: "json",
contentType: 'application/json; charset=utf-8',
data: { "val": true }
});
public class HomeController : Controller
{
[HttpPost]
public void SetValue(bool val)
{
bool check = val;
}
}
解法:
我必须做两件事才能让它工作。
首先,我不得不删除 dataType
行,因为它指定了 return 类型 而我的操作没有 return 任何东西.其次,contentType
是错误的。我可以使用 application/x-www-form-urlencoded; charset=UTF-8
或只删除该行。这是默认值 contenteType
,在这种情况下有效。
url 的大小写无关紧要,并且不需要回调(例如,成功或错误)。所以,这有效:
$.ajax({
url: "/home/setvalue",
type: "post",
data: { "val": true }
});
我可以使用 jQuery.post 而不是 jQuery.ajax 来进一步简化它。这是我第一个 ASP.NET 核心应用程序中最后的简单概念证明:
// JavaScript
$("#myCheckbox").on("click", function ()
{
var isChecked = $(this).is(":checked");
$.post({
url: "/home/setvalue",
data: { "val": isChecked }
});
});
// .NET controller
[HttpPost]
public void SetValue(bool val)
{
bool check = val;
}
感谢所有的输入。
您需要删除数据类型=Json。您还可以删除 contentType。把成功和错误有助于检查你的结果是什么。此代码适用于您的条件,并且 SetValue 方法中的布尔值是 true。
$("button").click(function () {
$.ajax({
type: "POST",
url: "/Home/SetValue/",
data: { "val": true },
success: function (result) {
alert('ok');
},
error: function (result) {
alert('error');
}
});
});
从 Ajax 代码中删除 DataType
并将 [FromBody]
添加到 SetValue 方法中,如下所示:
public class HomeController : Controller
{
[HttpPost] public void SetValue([FromBody]bool val)
{
bool check = val;
}
}
您需要更正控制器名称的大小写,使其应该是 Home 而不是 home。
此外,为了在 ASP.NET Core 中使用 JSON 进行绑定,您需要在控制器操作中使用 [FromBody] 属性。查看此博客以获取更多信息:https://andrewlock.net/model-binding-json-posts-in-asp-net-core/
最后,添加成功回调,它应该可以工作了。
希望这对您有所帮助:)
数据类型:'json',
Its mean return type of data from server should be json
内容类型:'application/json; charset=utf-8',
Its mean data type should be json before to send it to server in your case you need to convert your data into json stringfy.
为什么我的 MVC 操作 (ASP.NET Core 1.1) 总是显示此代码的值 false:
$.ajax({
url: "/home/SetValue",
type: "post",
dataType: "json",
contentType: 'application/json; charset=utf-8',
data: { "val": true }
});
public class HomeController : Controller
{
[HttpPost]
public void SetValue(bool val)
{
bool check = val;
}
}
解法:
我必须做两件事才能让它工作。
首先,我不得不删除 dataType
行,因为它指定了 return 类型 而我的操作没有 return 任何东西.其次,contentType
是错误的。我可以使用 application/x-www-form-urlencoded; charset=UTF-8
或只删除该行。这是默认值 contenteType
,在这种情况下有效。
url 的大小写无关紧要,并且不需要回调(例如,成功或错误)。所以,这有效:
$.ajax({
url: "/home/setvalue",
type: "post",
data: { "val": true }
});
我可以使用 jQuery.post 而不是 jQuery.ajax 来进一步简化它。这是我第一个 ASP.NET 核心应用程序中最后的简单概念证明:
// JavaScript
$("#myCheckbox").on("click", function ()
{
var isChecked = $(this).is(":checked");
$.post({
url: "/home/setvalue",
data: { "val": isChecked }
});
});
// .NET controller
[HttpPost]
public void SetValue(bool val)
{
bool check = val;
}
感谢所有的输入。
您需要删除数据类型=Json。您还可以删除 contentType。把成功和错误有助于检查你的结果是什么。此代码适用于您的条件,并且 SetValue 方法中的布尔值是 true。
$("button").click(function () {
$.ajax({
type: "POST",
url: "/Home/SetValue/",
data: { "val": true },
success: function (result) {
alert('ok');
},
error: function (result) {
alert('error');
}
});
});
从 Ajax 代码中删除 DataType
并将 [FromBody]
添加到 SetValue 方法中,如下所示:
public class HomeController : Controller
{
[HttpPost] public void SetValue([FromBody]bool val)
{
bool check = val;
}
}
您需要更正控制器名称的大小写,使其应该是 Home 而不是 home。
此外,为了在 ASP.NET Core 中使用 JSON 进行绑定,您需要在控制器操作中使用 [FromBody] 属性。查看此博客以获取更多信息:https://andrewlock.net/model-binding-json-posts-in-asp-net-core/
最后,添加成功回调,它应该可以工作了。
希望这对您有所帮助:)
数据类型:'json',
Its mean return type of data from server should be json
内容类型:'application/json; charset=utf-8',
Its mean data type should be json before to send it to server in your case you need to convert your data into json stringfy.