【问题标题】:Value from ajax call always false in MVC action来自 ajax 调用的值在 MVC 操作中始终为 false
【发布时间】:2017-10-18 22:07:36
【问题描述】:

为什么我的 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,在这种情况下有效。

url 的大小写无关紧要,并且不需要回调(例如,成功或错误)。所以,这行得通:

    $.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;
}

感谢大家的意见。

【问题讨论】:

  • 您的 $.ajax 调用不是缺少成功和错误处理程序吗?
  • 删除contentType选项(您没有对数据进行字符串化,也没有理由这样做)。以及为什么在调用void 方法时要指定dataType: "json"

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


【解决方案1】:

您需要删除 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】:

    从 Ajax 代码中删除 DataType 并将 [FromBody] 添加到 SetValue 方法中,如下所示:

    public class HomeController : Controller
    { 
        [HttpPost] public void SetValue([FromBody]bool val)
        {
          bool check = val; 
        } 
    }
    

    【讨论】:

      【解决方案3】:

      您需要更正控制器名称的大小写,使其应为 Home 而不是 home。

      此外,为了在 ASP.NET Core 中使用 JSON 进行绑定,您需要在控制器操作中使用 [FromBody] 属性。查看此博客了解更多信息:https://andrewlock.net/model-binding-json-posts-in-asp-net-core/

      最后,添加成功回调,它应该可以工作了。

      希望这会有所帮助:)

      【讨论】:

        【解决方案4】:

        数据类型:'json',

        从服务器返回数据的平均类型应该是json

        contentType: '应用程序/json; charset=utf-8',

        它的平均数据类型应该是json,然后才能将其发送到服务器,如果您需要将数据转换为json stringfy。

        【讨论】:

          猜你喜欢
          • 2016-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多