Asp.net MVC Ajax вызывает нулевой параметр в GET HTML - PullRequest
0 голосов
/ 14 мая 2019

Поэтому я пытаюсь передать массив целых чисел моему контроллеру.

В моем вызове ajax, если я использую тип: 'GET', dataType: 'HTML', мой целочисленный массив не передается контроллеру. Тот же самый вызов ajax работает, если я использую type: 'POST', dataType: 'JSON', но мне нужно вернуть частичное представление.

Есть идеи, пожалуйста?

Вот мой код:

Контроллер:

    public ActionResult GetLaySimulation(int[] projectIDs)
    {
        var layList = LayHelper.GetLayObjects(projectIDs); //projectIDs = null if I have GET HTML in my ajax call.
        return PartialView("_LaySimulation", layList);
    }

Рабочий вызов ajax:

    $.ajax({
            url: '@Url.Action("GetLaySimulation", "Admin")',
            type: 'POST',
            data: { projectIDs: simulationIDs },
            dataType: 'JSON',
            success: function (result) {
                hideLoader();
                $("#lay-container").html(result);
            },
            error: function (err) {
                hideLoader();
            }
        });

Что мне нужно:

   $.ajax({
            url: '@Url.Action("GetLaySimulation", "Admin")',
            type: 'GET',
            data: { projectIDs: simulationIDs },
            dataType: 'HTML',
            success: function (result) {
                hideLoader();
                $("#lay-container").html(result);
            },
            error: function (err) {
                hideLoader();
            }
        });

******************** Редактировать *********************

Функция Javascript:

 $("#lay-container").html("");

    var simulationIDs = [];
    var checkBoxes = $(".chk-export");
    var showButton = false;
    for (var i = 0; i < checkBoxes.length; i++) {
        if ($(checkBoxes[i]).is(":checked") == true) {
            simulationIDs.push($(checkBoxes[i]).attr("data-id"));
        }
    }
    if (simulationIDs.length > 0) {

        $(".btn-excel").fadeIn();
        $("#lay-container").fadeIn();
        showLoader();

        $.ajax({
            url: '@Url.Action("GetLaySimulation", "Admin")',
            type: 'GET',
            data: { projectIDs: simulationIDs },
            dataType: 'HTML',
            success: function (result) {
                hideLoader();
                $("#lay-container").html(result);
            },
            error: function (err) {
                hideLoader();
            }
        });
    }

Ответы [ 3 ]

2 голосов
/ 14 мая 2019

Вы можете сделать это, используя type как POST и dataType как html Не запутайтесь conf

1 голос
/ 14 мая 2019

Вы можете отправить массив в queryString. Код Javascrip:

    $.ajax({
        url: '@Url.Action("GetLaySimulation", "Admin")' + "?projectIDs=" + JSON.stringify(simulationIDs),
        type: 'GET',
        dataType: 'HTML',
        success: function (result) {
            hideLoader();
            $("#lay-container").html(result);
        },
        error: function (err) {
            hideLoader();
        }
    });

Для извлечения в контроллере:

public ActionResult GetLaySimulation()
{
    var ids = HttpContext.Request.QueryString["projectIDs"];
    int[] projectIDs = JsonConvert.DeserializeObject<int[]>(ids);
    // Code....
}    
0 голосов
/ 14 мая 2019

Я нашел такое решение, но я не удовлетворен.В то же время я не понимал, почему я могу передать строковый параметр, но не массив:

   public ActionResult GetLaySimulation(string ids)
    {
        var idsStr = ids.Split(',');
        List<int> projectIDs = new List<int>();
        foreach (var item in idsStr)
        {
            if (!string.IsNullOrEmpty(item))
                projectIDs.Add(int.Parse(item));
        }
        var layList = LayHelper.GetLayObjects(projectIDs.ToArray());
        return PartialView("_LaySimulation", layList);
    }

Просмотр:

  function chkClicked() {
    $("#lay-container").html("");

    var simulationIDs = "";
    var checkBoxes = $(".chk-export");
    var showButton = false;
    for (var i = 0; i < checkBoxes.length; i++) {
        if ($(checkBoxes[i]).is(":checked") == true) {
            simulationIDs += $(checkBoxes[i]).attr("data-id") + ",";
        }
    }
    if (simulationIDs.length > 0) {

        $(".btn-excel").fadeIn();
        $("#lay-container").fadeIn();
        showLoader();

        $.ajax({
            url: '@Url.Action("GetLaySimulation", "Admin")',
            type: 'GET',
            data: { ids: simulationIDs },
            dataType: 'HTML',
            success: function (result) {
                hideLoader();
                $("#lay-container").html(result);
            },
            error: function (err) {
                hideLoader();
            }
        });
    }

    else {
        $(".btn-excel").fadeOut();
        $("#lay-container").fadeOut();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...