.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
相关产品推荐
相关产品推荐

