控制器操作中的AJAX空参数

时间:2019-03-22 14:10:16

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

我希望将值从我的视图传递给控制器​​操作,但是每次我执行此参数时,该参数为null。我看过多个关于相同内容的文章,但似乎不太正确。我的代码在下面

控制器动作

[HttpPost]
    public IActionResult GetTest(string data)
    {
        var jSon = JsonConvert.SerializeObject(channles[0]);

        return Json(jSon);
    }

查看(AJAX)代码

function testAjax() {

        $("#searchButton1").click(function () {
            $.ajax({
                type: "POST",
                url: '@Url.Action("GetTest", "DataGridWebApi")',
                data: { data: "test" },
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (response) {
                    alert("Hello: " + response.Name + " .\nCurrent Date and Time: " + response.DateTime);
                },
                failure: function (response) {
                    alert(response.responseText);
                },
                error: function (response) {
                    alert(response.responseText);
                }
            });
        });
}

我在控制器操作中遇到了断点,但是参数始终为null。我还尝试将控制器动作更改为接受对象而不是字符串,但是似乎没有任何作用。

我在做什么错?

3 个答案:

答案 0 :(得分:1)

删除行:contentType: "application/json; charset=utf-8",应该可以使它工作。就在昨天,我遇到了完全相同的问题。我们有进行JSON调用的标准方法,并且有人也插入了这一行,从而导致对象无法在控制器上绑定。

答案 1 :(得分:1)

您需要进行两项更改。您确实需要在参数上使用[FromBody]

public IActionResult GetTest([FromBody]string data)

然后,您只需要发送字符串作为JSON:

data: JSON.stringify("test")

这似乎有些怪异,但是如果没有JSON.stringify,它将以test的形式发送,您需要"test"。简而言之,您要发送的字符串具有JSON内容类型,因此它必须是 JSON字符串

答案 2 :(得分:0)

尝试在控制器参数的[FromBody]之前添加string dataHere is why