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

如何结合foreach实现多下拉选框数据批量插入?

解决方案:批量提交多行下拉选框数据到数据库

要实现单按钮批量提交所有学生的课堂时长选择,核心是把所有行的表单元素归到同一个表单中,并让ASP.NET MVC能自动绑定多行数据到集合里。下面是具体的修改步骤:

1. 创建批量数据模型类

首先添加一个模型类,用来封装每行学生的课堂时长数据:

public class StudentMinutesModel
{
    public int ClassID { get; set; }
    public int SID { get; set; }
    public string FullName { get; set; }
    public int Minutes { get; set; }
}

2. 修改View代码:单表单包裹所有行

把原来每行一个表单的结构,改成整个表格包裹在单个表单内,并调整表单元素的name属性,让MVC能识别批量数据:

<div class="table-responsive">
    <div style="margin-top:20px;">
        @using (Html.BeginForm("Index", "Minutes", FormMethod.Post))
        {
            <table id="tablereport" class="table table-striped table-bordered table-hover table-condensed">
                <thead style="background-color:black; font-weight:bold; color:aliceblue">
                    <tr>
                        <th>ClassID</th>
                        <th>SID</th>
                        <th>FullName</th>
                        <th>Minutes</th>
                    </tr>
                </thead>
                <tbody>
                    @for (int i = 0; i < ViewBag.general.Rows.Count; i++)
                    {
                        var dr = ViewBag.general.Rows[i];
                        <tr>
                            <td>
                                @dr["ClassID"]
                                @Html.Hidden($"MinutesList[{i}].ClassID", dr["ClassID"])
                            </td>
                            <td>
                                @dr["SID"]
                                @Html.Hidden($"MinutesList[{i}].SID", dr["SID"])
                            </td>
                            <td>
                                @dr["FullName"]
                                @Html.Hidden($"MinutesList[{i}].FullName", dr["FullName"])
                            </td>
                            <td>
                                @Html.DropDownList($"MinutesList[{i}].Minutes", new List<SelectListItem>
                                {
                                    new SelectListItem{ Text="50", Value = "50" },
                                    new SelectListItem{ Text="40", Value = "40" },
                                    new SelectListItem{ Text="30", Value = "30" },
                                    new SelectListItem{ Text="20", Value = "20" },
                                    new SelectListItem{ Text="10", Value = "10" },
                                })
                            </td>
                        </tr>
                    }
                </tbody>
            </table>
            <div>
                <input type="submit" id="formsubmit" name="submit" value="Insert" class="btn btn-default">
            </div>
        }
    </div>
</div>

关键修改说明:

  • 将Html.BeginForm移到表格外部,所有行的表单元素都属于同一个表单
  • 使用for循环遍历数据,通过索引i构建表单元素的name属性(如MinutesList[{i}].Minutes),这是MVC批量绑定的规则
  • 用隐藏字段Hidden存储ClassID、SID、FullName,这些数据需要提交但不需要用户修改

3. 修改Controller:接收批量数据并循环插入

更新Post方法,接收集合类型的参数,遍历插入每条数据:

public class MinutesController : Controller
{
    // GET: Minutes
    public ActionResult Index()
    {
        // 保持原有逻辑,从存储过程获取数据赋值给ViewBag.general
        return View();
    }

    [HttpPost]
    public ActionResult Index(List<StudentMinutesModel> minutesList)
    {
        if (minutesList != null && minutesList.Any())
        {
            var db = new DB();
            foreach (var item in minutesList)
            {
                db.InsertMinutes(item.ClassID, item.Minutes, item.SID, item.FullName);
            }
        }

        // 批量提交后重定向回列表页
        return RedirectToAction("Index");
    }
}

关键修改说明:

  • Post方法参数改为List<StudentMinutesModel> minutesList,MVC会自动把表单提交的多行数据绑定到这个集合
  • 遍历集合中的每个元素,调用插入方法完成批量存储
  • 移除了原有的单个参数重定向,批量提交后直接返回列表页即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:50:05