You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET MVC中通过JavaScript将数组传递至控制器?

修改JavaScript函数以传递复选框选中值数组到ASP.NET MVC后端控制器

我在ASP.NET MVC页面中设置了一组复选框,当选中这些复选框并点击按钮时,会调用一个JavaScript函数来获取选中项的值。请问需要修改该JavaScript函数中的哪些内容,才能将这些值组成的数组传递至后端控制器中?


现有代码

按钮代码

<input type="button" value="Submit" onclick="getChecked()"> 

复选框代码

@foreach (var item in Model.Attachments)
{                
    <input class="form-check-input" type="checkbox" name="item" value="@item.Id" >
}

待修改的JavaScript函数

function getChecked() {
 
 var arr = [];

 checked_items = ''
 var items = document.getElementsByName("item")
 for (i = 0; i < items.length; i++) {
       if (items[i].checked)
        arr.push(item[i]);
        }
        alert('JAVASCRIPT : Checked items are : ' + arr);

    }

后端控制器代码

[HttpPost]
public ActionResult Selected(Guid[] item)
{
   return View(item);
}

需要修改的内容

1. 修复选中值收集的错误

原函数中arr.push(item[i]);存在两处问题:

  • 变量名错误:遍历的集合是items,不是item,应改为items[i]
  • 收集对象错误:当前代码收集的是DOM元素本身,我们需要的是复选框的value属性值(即@item.Id对应的Guid字符串)

修正后代码:

arr.push(items[i].value);

2. 添加向后端发送请求的逻辑

原函数仅完成了选中值的收集,没有将数据传递到后端。需要新增AJAX请求逻辑,将数组发送到控制器的Selected方法。以下是使用原生fetch API的实现:

在收集完选中值后,添加以下代码:

// 发送POST请求到后端控制器
fetch('/你的控制器名/Selected', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        // 携带ASP.NET MVC必需的CSRF验证Token
        'RequestVerificationToken': document.querySelector('input[name="__RequestVerificationToken"]').value
    },
    body: JSON.stringify(arr)
})
.then(response => {
    if (response.ok) {
        console.log('数据提交成功');
        // 可根据需求添加页面跳转、提示等后续操作
    } else {
        throw new Error('请求失败');
    }
})
.catch(error => {
    console.error('提交出错:', error);
});

注意:

  • 替换/你的控制器名/Selected为实际的控制器路由地址
  • 需在页面表单内添加@Html.AntiForgeryToken(),否则后端会因CSRF验证失败拒绝请求

修改后的完整JavaScript函数

function getChecked() {
    var arr = [];
    var items = document.getElementsByName("item");
    // 遍历收集选中的复选框value值
    for (var i = 0; i < items.length; i++) {
        if (items[i].checked) {
            arr.push(items[i].value);
        }
    }
    alert('JAVASCRIPT : Checked items are : ' + arr);

    // 新增:将数组发送到后端
    fetch('/Home/Selected', { // 替换为你的控制器路径
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'RequestVerificationToken': document.querySelector('input[name="__RequestVerificationToken"]').value
        },
        body: JSON.stringify(arr)
    })
    .then(response => {
        if (response.ok) {
            console.log('提交成功');
        } else {
            throw new Error('请求失败');
        }
    })
    .catch(error => {
        console.error('提交出错:', error);
    });
}

额外说明

后端Selected方法的Guid[] item参数可以直接接收前端传递的字符串数组,ASP.NET MVC的模型绑定会自动将字符串转换为Guid类型。

内容的提问来源于stack exchange,提问作者Michaelweston

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:42:51