如何使用 Url.Action 发送数组

How to send an array using Url.Action

我有一个名为 data 的整数数组,我想将其从我的视图发送到特定的控制器,我可以看到我可以发送整数和字符串并且它可以工作使用到目前为止的代码,但是当我尝试发送数组时,我可以正确获取数据。

这是我认为的代码,从透视角度来看,它很简单。

function SeeStation() {
                var data = [];
                var i = 0;
                $("input:checkbox:checked").each(function () {
                    data[i] = $(this).val();
                });
                window.location.href = "@Url.Action("ExportData", "Dispatch")?id=" + data;
            }

这是控制器中的代码。我知道这没有多大意义,但到目前为止我专注于通过参数正确获取数组。

public ActionResult ExportData(int[] id)
        {
            var data = cn.ESTACIONDESPACHOes.ToList();
            return View(data);
        }

在我的数组 data 中,我存储了类似 [1,2,3] 的内容,我想在控制器数组 id.

尝试

@Url.Action("ExportData", "Dispatch", new { id= [1,2,3] })

不会那样绑定的。 要在您的操作中获取 id 数组,您需要在末尾添加 link,如下所示:*Dispatch/ExportData?id=1&id=2&id=3*

你的 "@Url.Action("ExportData", "Dispatch")?id=" + data; 不会生成那个(data 会给出用逗号分隔的数字)。

您可以在枚举复选框时构建查询字符串。

function SeeStation() {
    var data = '';
    $("input:checkbox:checked").each(function () {
    data += 'id='$(this).val() + '&';
    });  
    window.location.href = "@Url.Action("ExportData", "Dispatch")?" + data;
}

最后会有一个“&”。你可以很容易地删除它,但它不会影响任何东西。

虽然可能有更好的方法来做到这一点,但我只是使用了你的功能。

将值存储在隐藏字段中 @Html.HiddenFor(m => m.Ids, new { @Value = [1,2,3] })

然后使用 Ajax 获取方法传递隐藏字段

在控制器方法中使用字符串扩展方法将字符串转换为数组

function SeeStation() {
            var data = [];
            var i = 0;
            $("input:checkbox:checked").each(function () {
                data[i] = $(this).val();
            });
            location.href = '@Url.Action("ExportData", "Dispatch")?id=' + data;
        }

请删除 window 关键字。