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

如何在MVC的Razor视图中使用Ado.Net显示外键关联数据

问题诊断与解决方案

嘿,这问题我太熟了!核心原因是你的存储过程返回了两个同名的Name列——一个来自学生表,一个来自部门表,当你用dr["Name"]读取时,默认只会拿到第一个(学生的姓名),所以部门对象的Name被错误赋值成了学生名字,自然显示不对。

咱们一步步来修正:

第一步:给存储过程的重名列加别名

把部门表的Name列起个独特的别名,比如DeptName,这样结果集里的列就不会重名冲突了:

select 
    StudentTbl.StudentId,
    StudentTbl.Name,
    StudentTbl.Roll,
    StudentTbl.DeptId,
    DeptTbl.Name as DeptName  -- 给部门名称列加别名
from Demo.dbo.StudentTbl 
inner join Demo.dbo.DeptTbl ON StudentTbl.DeptId = DeptTbl.DeptId

第二步:修改GetStudent方法,读取正确的部门名称列

现在遍历DataRow时,要读取咱们刚加的DeptName列来赋值给部门对象的Name,顺便修正你之前写错的注释:

public List<Student> GetStudent() 
{
    connection();
    List<Student> stdList = new List<Student>();
    SqlCommand com = new SqlCommand("Sp_GetStudent", con);
    com.CommandType = CommandType.StoredProcedure;
    SqlDataAdapter da = new SqlDataAdapter(com);
    DataTable dt = new DataTable();
    con.Open();
    da.Fill(dt);
    con.Close();

    foreach (DataRow dr in dt.Rows) 
    {
        Dept dpt = new Dept();
        dpt.DeptId = Convert.ToInt32(dr["DeptId"]); // 这是部门ID,不是学生ID哦
        dpt.Name = Convert.ToString(dr["DeptName"]); // 读取别名后的部门名称列
        stdList.Add( 
            new Student { 
                StudentId = Convert.ToInt32(dr["StudentId"]),
                Name = Convert.ToString(dr["Name"]),
                Roll = Convert.ToString(dr["Roll"]),
                DeptId = Convert.ToInt32(dr["DeptId"]),
                Dept = dpt 
            } 
        );
    }
    return stdList;
}

小补漏:完善Student类的Roll属性

看你的Student类定义里没有Roll属性,但代码里却在赋值和展示,记得补上避免报错:

public class Student 
{ 
    public int StudentId { get; set; } 
    public string Name { get; set; } 
    public int DeptId { get; set; } 
    public Dept Dept { get; set; } 
    public string Roll { get; set; } // 补上这个缺失的属性
}

做完这些修改后,你的Razor视图里@Html.DisplayFor(modelItem => item.Dept.Name)就能正确显示部门名称啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:44:15