为什么我的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
行,因为它指定返回类型并且我的操作不会返回任何内容。其次,contentType
错了。我可以使用application/x-www-form-urlencoded; charset=UTF-8
或只删除该行。这是默认的contenteType
,在这种情况下有效。
网址的大写是无关紧要的,并且不需要回调(例如,成功或错误)。所以,这有效:
$.ajax({
url: "/home/setvalue",
type: "post",
data: { "val": true }
});
我可以使用jQuery.post而不是jQuery.ajax来进一步简化它。这是我在我的第一个ASP.NET Core应用程序中的最终简单概念证明:
// 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;
}
感谢您的所有输入。
答案 0 :(得分:3)
从Ajax代码中删除DataType
并将[FromBody]
添加到SetValue方法,如下所示:
public class HomeController : Controller
{
[HttpPost] public void SetValue([FromBody]bool val)
{
bool check = val;
}
}
答案 1 :(得分:2)
您需要删除datatype = 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');
}
});
});
答案 2 :(得分:1)
dataType:' json',
来自服务器的平均返回数据类型应为json
contentType:' application / json;字符集= UTF-8',
它的平均数据类型应该是json之前将它发送到服务器,在你需要将数据转换为json stringfy的情况下。
答案 3 :(得分:0)
您需要更正控制器名称的大小写,因此它应该是Home而不是home。
此外,为了在ASP.NET Core中使用JSON进行绑定,您需要在控制器操作中使用[FromBody]属性。查看此博客,了解有关它的更多信息:https://andrewlock.net/model-binding-json-posts-in-asp-net-core/
最后,添加成功回调,它应该有效。
希望这会有所帮助:)