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

.NET Core 6中如何在视图展示其他模型的关联数据?

在Index视图中显示关联的课程名称

要实现从关联的CursosModel表中获取课程名称并展示,需要完成以下三步:

1. 为Professor模型添加导航属性

修改FeedbackUnivicosa.Models.Professor类,添加与CursosModel的关联导航属性,让Entity Framework识别两者的外键关系:

public class Professor
{
    // 原有属性
    public int Id { get; set; }
    public string Nome { get; set; }
    public string EmailProfessor { get; set; }
    public int CursoId { get; set; }

    // 添加导航属性
    public virtual CursosModel Curso { get; set; }
}

2. 在控制器中加载关联数据

修改Professor控制器的Index方法,使用Include方法将关联的Curso数据一起查询(避免懒加载导致的性能问题或空引用),同时保留原有的搜索、排序逻辑:

public async Task<IActionResult> Index(string sortOrder, string searchString)
{
    // 原有排序、筛选逻辑
    ViewData["NameSortParm"] = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
    ViewData["EmailSortParm"] = sortOrder == "email" ? "email_desc" : "email";
    ViewData["CursoSortParm"] = sortOrder == "curso" ? "curso_desc" : "curso";
    ViewData["CurrentFilter"] = searchString;

    var professores = from p in _context.Professores.Include(p => p.Curso) // 添加Include加载关联数据
                      select p;

    if (!String.IsNullOrEmpty(searchString))
    {
        professores = professores.Where(p => p.Nome.Contains(searchString)
                                       || p.EmailProfessor.Contains(searchString)
                                       || p.Curso.NomeCurso.Contains(searchString)); // 可选:支持按课程名称搜索
    }

    // 原有排序逻辑
    switch (sortOrder)
    {
        case "name_desc":
            professores = professores.OrderByDescending(p => p.Nome);
            break;
        case "email":
            professores = professores.OrderBy(p => p.EmailProfessor);
            break;
        case "email_desc":
            professores = professores.OrderByDescending(p => p.EmailProfessor);
            break;
        case "curso":
            professores = professores.OrderBy(p => p.Curso.NomeCurso);
            break;
        case "curso_desc":
            professores = professores.OrderByDescending(p => p.Curso.NomeCurso);
            break;
        default:
            professores = professores.OrderBy(p => p.Nome);
            break;
    }
    return View(await professores.ToListAsync());
}

3. 修改Index视图展示课程名称

找到视图中显示CursoId的代码块,替换为显示关联课程的名称(注意替换为你CursosModel中实际的名称字段,比如NomeCurso):

<td>
    @Html.DisplayFor(modelItem => item.Curso.NomeCurso)
</td>

如果担心课程数据可能为空(比如CursoId无效),可以添加空值判断避免报错:

<td>
    @(item.Curso != null ? item.Curso.NomeCurso : "无关联课程")
</td>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:50:25