Asp.net MVC Ajax在GET HTML

时间:2019-05-14 14:02:08

标签: c# ajax asp.net-mvc-5

所以我尝试将整数数组传递给控制器​​。

在我的Ajax调用中,如果我使用类型:“ GET”,dataType:“ HTML”,则我的整数数组不会传递给控制器​​。 如果我使用类型:“ POST”,数据类型:“ JSON”,则相同的ajax调用也有效,但是,我需要返回部分视图。

有什么想法吗?

这是我的代码:

控制器:

    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 个答案:

答案 0 :(得分:2)

您可以使用POST类型和dataType作为html来做到这一点Don

答案 1 :(得分:1)

您可以在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();
        }
    });

要检索int控制器:

public ActionResult GetLaySimulation()
{
    var ids = HttpContext.Request.QueryString["projectIDs"];
    int[] projectIDs = JsonConvert.DeserializeObject<int[]>(ids);
    // Code....
}    

答案 2 :(得分:0)

我找到了这样的解决方案,但不满意。 同时,我不明白为什么我可以传递一个字符串参数而不是一个数组:

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