来自 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.