При вызове из AJAX список кажется пустым - PullRequest
0 голосов
/ 20 февраля 2019

Я создаю веб-приложение, в котором у меня есть сценарий, в котором я отправляю данные в виде списка в фоновом режиме, приведенный ниже пример объясняет это,

Мой модальный

public class NavigationModal
{
    public int regId { get; set; }
    public string URL { get; set; }
}

Моя функция

    public int postData(List<NavigationModal> contents)
    {
        Session["data"] = contents;
        return 1;
    }

Имя моего контроллера

public class NavigationController : Controller

Код переднего конца

var data = [];

function StoreDataInSession(regId, MyRegistrations) {
    var contents = {
        regId: regId,
        URL: window.location.pathname.split("/")[2] == null ? 'index' : window.location.pathname.split("/")[2]
    };
    data.push(contents);
    var newData = JSON.stringify({ 'contents': data });
    $.ajax({
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        type: 'POST',
        url: '../Navigation/postData',
        data: data,
        success: function () { ReDirectToAction(); }
    });
}

Но мои данные кажутся нулевыми, когда я отлаживаюконтроллер, и когда я вижу данные в консоли, они поступают правильно.

В чем моя проблема?

enter image description here

1 Ответ

0 голосов
/ 20 февраля 2019

Похоже, ваш метод действия имеет неправильный тип возврата и метод HTTP в этом определении:

public int postData(List<NavigationModal> contents)

Обратите внимание, что контроллер, который получает данные JSON из запроса AJAX, должен иметь как минимум ActionResult в качестве типа возврата (Вы можете использовать JsonResult в качестве альтернативы из-за настройки dataType: json) и указать атрибут [HttpPost], потому что type: POST было установлено в обратном вызове AJAX.

Правильная настройка для запроса AJAX должна быть такой, как в следующем примере:

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

[HttpPost]
public JsonResult PostData(List<NavigationModal> contents)
{
    Session["data"] = contents;
    return Json("true");
}

Обратный вызов AJAX

var data = [];

function StoreDataInSession(regId, MyRegistrations) {
    var contents = {
        regId: regId,
        URL: window.location.pathname.split("/")[2] == null ? 'index' : window.location.pathname.split("/")[2]
    };
    data.push(contents);
    var newData = JSON.stringify({ 'contents': data });

    $.ajax({
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        type: 'POST',
        url: '@Url.Action("PostData", "Navigation")',
        data: newData,
        success: function () { ReDirectToAction(); }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...