来自ajax的值在MVC操作中始终为false

时间:2017-05-18 22:36:58

标签: jquery ajax asp.net-mvc asp.net-core-1.1

为什么我的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;
}

感谢您的所有输入。

4 个答案:

答案 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/

最后,添加成功回调,它应该有效。

希望这会有所帮助:)