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

ASP.NET MVC中.cshtml嵌套foreach循环数据展示异常问题

解决ASP.NET MVC视图中嵌套foreach显示数据混乱的问题

我看了你的代码,问题根源很明显:你把员工姓名和部门名称分别存在两个独立的List<string>里,然后在视图里用嵌套foreach循环,这就导致每个员工都会遍历一遍所有部门,输出自然全乱了!正确的思路应该是把每一组「员工+对应部门」作为一个整体来存储,而不是拆分到两个列表里。

下面是具体的修改步骤:

1. 创建配对模型类

首先新建一个类,用来保存单条员工与部门的对应关系:

namespace MvcApplication3.Models
{
    public class EmployeeDeptPair
    {
        public string EmpName { get; set; }
        public string DeptName { get; set; }
    }
}

2. 更新ViewAllData模型

把原来的两个List<string>换成存储配对对象的列表:

public class ViewAllData
{
    // 如果你不需要单个的empname/deptname,可以删掉这两个属性
    public string empname { get; set; }
    public string deptname { get; set; }
    
    // 新增这个列表,用来存所有员工-部门配对
    public List<EmployeeDeptPair> EmployeeDeptList { get; set; }
}

3. 修改Controller的数据读取逻辑

读取数据库时,把每一行数据封装成EmployeeDeptPair对象,添加到配对列表中:

public ActionResult me() 
{ 
    ViewAllData objviewalldata = new ViewAllData(); 
    // 初始化配对列表
    objviewalldata.EmployeeDeptList = new List<EmployeeDeptPair>();

    MySqlConnection con = new MySqlConnection(@"server=127.0.0.1;user id=root;pwd=n0711p2010p;database=demo;persistsecurityinfo=True"); 
    using (con) 
    { 
        con.Open(); 
        string query = "select emp.empname,dept.deptname from emp inner join dept on emp.deptid=dept.deptid"; 
        using (MySqlCommand cmd = new MySqlCommand(query, con)) 
        { 
            using (MySqlDataReader dr = cmd.ExecuteReader()) 
            { 
                while (dr.Read()) 
                { 
                    var empDeptPair = new EmployeeDeptPair();
                    empDeptPair.EmpName = dr["empname"].ToString();
                    empDeptPair.DeptName = dr["deptname"].ToString();
                    objviewalldata.EmployeeDeptList.Add(empDeptPair);
                } 
            } 
        } 
    } 
    return View(objviewalldata); 
}

4. 简化视图的循环逻辑

现在视图里只需要一个foreach循环,遍历配对列表就能正确显示每一行数据:

@model MvcApplication3.Models.ViewAllData 
@{ 
    ViewBag.Title = "Data"; 
} 

<h2>Data</h2> 

<table> 
    <tr> 
        <th>Employee Name</th> 
        <th>Department Name</th> 
    </tr> 
    @foreach (var pair in Model.EmployeeDeptList) 
    { 
        <tr> 
            <td>@pair.EmpName</td> 
            <td>@pair.DeptName</td> 
        </tr> 
    } 
</table>

为什么原来的代码会乱?

你原来的两个列表alllemp和alldept是平行存储的——第一个员工对应第一个部门,第二个员工对应第二个部门,但嵌套foreach会让每个员工都输出所有部门名称,比如第一个员工行里会把所有部门都列一遍,第二个员工行也是如此,这自然和你想要的一对一对应格式不符。而用配对类的方式,每一条数据都是完整的「员工+部门」组合,循环一次就能精准输出每一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:03:42