Пустой параметр AJAX в действии контроллера - PullRequest
0 голосов
/ 22 марта 2019

Я хочу передать значения из моего представления в действие контроллера, однако каждый раз, когда я делаю, параметр равен нулю. Я видел несколько постов об одних и тех же вещах, но, похоже, не совсем правильно понял ... мой код ниже

Действие контроллера

[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);
                }
            });
        });
}

Я достиг точки останова в моем действии контроллера, но параметр всегда нулевой. Я также попытался изменить действие контроллера, чтобы он принимал объект вместо строки, но, похоже, ничего не работает.

Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 22 марта 2019

Удаление строки: contentType: "application/json; charset=utf-8", должно заставить ее работать. Только вчера у меня была точно такая же проблема. У нас есть стандартный способ выполнения вызовов JSON, и кто-то тоже вставил эту строку, заставляя объект не привязываться к контроллеру.

1 голос
/ 22 марта 2019

Вам нужно сделать два изменения.Вам нужно [FromBody] в параметре:

public IActionResult GetTest([FromBody]string data)

Затем вам нужно отправить только строку, как JSON:

data: JSON.stringify("test")

Это может показаться немного странным, но безJSON.stringify оно будет отправлено как test, и вам нужно "test".Короче говоря, вы отправляете строку с типом содержимого JSON, поэтому это должна быть строка JSON .

0 голосов
/ 22 марта 2019

Попробуйте добавить [FromBody] перед string data в параметрах контроллера. Вот почему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...