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

读取文件夹文件生成复选框列表仅显示最后一项的问题

问题解决:ASP.NET MVC遍历文件夹生成复选框列表仅显示最后一项

问题背景

在ASP.NET MVC后台管理项目(使用CSHTML视图)中,需读取指定文件夹(如C:\Import)的文件,循环生成以ImageCount为ID、ImageName为显示名称、默认未勾选的复选框列表。此前硬编码文件名时功能正常,但改用文件夹文件列表后,遍历过程中每次循环都新建List<CheckBoxModel>并赋值给ChkItems.CheckBoxItems,导致最终仅显示最后一个文件的复选框。

问题原因

每次循环都创建新的List<CheckBoxModel>实例,并直接赋值给ChkItems.CheckBoxItems,这会覆盖之前的列表数据,最终仅保留最后一次循环生成的单元素列表。正确逻辑应为初始化空列表后,在循环中逐个添加元素,而非反复覆盖列表。

修正代码

1. Controller代码修正

修改DeleteFile方法,先初始化空列表,再在循环中添加元素:

using System.IO;
using System.Web.Mvc;
using xxxx.xxxx.CMS.Models;
using System.Collections.Generic;

namespace xxxx.xxxx.CMS.Controllers
{
    public class DeleteController : Controller
    {
        // GET: Delete
        public ActionResult DeleteFile()
        {
            CheckBoxList ChkItems = new CheckBoxList();
            // 初始化空列表
            ChkItems.CheckBoxItems = new List<CheckBoxModel>();

            DirectoryInfo dinfo = new DirectoryInfo(@"C:\Import");
            FileInfo[] Files = dinfo.GetFiles();

            int count = 0;

            foreach (FileInfo i in Files)
            {
                count++;
                // 向已有列表添加新元素
                ChkItems.CheckBoxItems.Add(new CheckBoxModel 
                { 
                    ImageCount = count, 
                    ImageName = i.Name, 
                    IsChecked = false 
                });
            } 
            return View(ChkItems);
        }
    }
}  

2. CSHTML视图优化(可选)

原视图中checked="@item.IsChecked"会在值为false时渲染为checked="False",这会被HTML视为勾选状态,因此优化为条件渲染checked属性:

@model xxxx.xxxx.CMS.Models.CheckBoxList

<div class="form-horizontal">
    <h4>Select Images to Delete</h4>
    @foreach (var item in Model.CheckBoxItems)
    {
        <input id="@item.ImageCount"
               type="checkbox"
               @(item.IsChecked ? "checked" : "") />
        @item.ImageName<br />
    }
</div> 

3. Model代码(无需修改)

namespace xxxx.xxxx.CMS.Models
{
    using System;
    using System.Collections.Generic;
    using System.Data.Entity;
    using System.Linq;

    public class CheckBoxModel
    {
        public int ImageCount { get; set; }
        public string ImageName { get; set; }
        public bool IsChecked { get; set; }
     }

    public class CheckBoxList
    {
        public List<CheckBoxModel> CheckBoxItems { get; set; }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 15:05:07