首页 > 解决方案 > 尝试将 JavaScript 数组传递给我的 ASP.NET Core 控制器但失败

问题描述

一直试图找出为什么我的 AJAX 调用不起作用。我有数据网格,用户可以在其中选择要删除的行;然后按下删除按钮应将这些选定行的 ID 作为数组发送到我的控制器进行处理。然而,我的控制器只接收一个空的 int 数组。

这是我的代码,如果有人可以看到我做错的明显事情,将不胜感激:

    @(Html.DevExtreme().Button()
          .ID("gridDeleteSelected")
          .Text("Purge Selected")
          .Height(34)
          .Type(ButtonType.Default)
          .StylingMode(ButtonStylingMode.Outlined)
          .Width(120)
          .Disabled(true)
          .OnClick("purgeSelectedBatches")
    ) 

我的相关 JavaScript(当用户在数据网格中选择行时调用 selectedLoadContexts 方法):

<script>
var recordsToBePurged; 

function selectLoadContexts(data) {

    var purgeButton = $("#gridDeleteSelected").dxButton("instance");
    purgeButton.option("disabled", !data.selectedRowsData.length);
    recordsToBePurged = data;   

}

function purgeSelectedBatches() {

    var selectedKeys = recordsToBePurged.selectedRowKeys;
    console.log("selected keys = " + selectedKeys);

    $.ajax({
        url: "@Url.Action("PurgeSelected", "Purge")",
        type: 'POST',
        contentType: "application/json; charset=utf-8",
        dataType: 'JSON', 
        data: JSON.stringify({selectedKeys : selectedKeys}),
        success: function() {

            var url = '@Url.Action("PurgeSelected", "Purge")' +
                '?selectedKeys=' +
                selectedKeys;
            window.location = url;
        }
    }).done(function() {
        DevExpress.ui.notify("Purging selected batches marked as Do Not Retain: ", "info", 1500);
        console.log("Purging selected batches marked as Do Not Retain");
    });

}

</script>

我的控制器方法:

    [HttpPost]
    [Route("[action]")]
    public IActionResult PurgeSelected(int[] selectedKeys)
    {
        
        //process array of keys and remove selected records

        return Ok($" records removed");
    }

添加了控制台图像 添加了网络图像

标签: javascriptc#ajaxasp.net-coredevexpress

解决方案


好的,所以我修改了我的 purgeSelectedBatches 方法,剥离了 AJAX 调用,如下所示:

function purgeSelectedBatches() {

    var selectedKeys = recordsToBePurged.selectedRowKeys;
    console.log("selected keys = " + selectedKeys);

    if (selectedKeys.length() > 0) {
        $.ajax({
            url: "@Url.Action("PurgeSelected", "Purge")",
            type: 'POST',
            dataType: "json",
            data: { selectedKeys: selectedKeys }

        }).done(function() {
            DevExpress.ui.notify("Purging selected batches marked as Do Not Retain: ", "info", 1500);
            console.log("Purging selected batches marked as Do Not Retain");
        });
    } else {
        DevExpress.ui.notify("No records to be purged", "info", 1500);
    }
}

我从数据中删除了 contentType 和 JSON.stringify。控制器现在接收整数数组作为包含所选行的键的参数,如预期的那样。


推荐阅读