Razor Pages Index页面无法显示外键关联的CityName值问题
问题说明
已在Person类中配置City导航属性关联CityList类:
- Create页面可正常读取CityList数据填充城市下拉框
- Details、Edit、Delete页面均可正常读取并显示City导航属性下的CityName值
- 仅Index页面无法展示CityName的取值
相关代码
实体Model层代码
public class Person { public int CityId { get; set; } public virtual CityList City { get; set; } } public class CityList { public int Id { get; set; } [Display(Name = "Şehir")] public string CityName { get; set; } }
Index.cshtml视图代码
@foreach (var item in Model.People) { <tr> <td> @Html.DisplayFor(modelItem => item.City.CityName) </td> </tr> }
问题原因
缺失的是Index接口查询数据时对关联导航属性的加载配置:
Details、Edit、Delete页面都是查询单条Person记录,EF可基于外键CityId、结合变更跟踪机制自动补全关联的City数据,延迟加载可正常触发;但Index页面是批量查询Person列表,若不显式指定加载关联的City数据,默认查询不会自动填充City导航属性,导致item.City为null,视图自然无法渲染出CityName值。
修复方法
找到Person控制器中Index对应的Action方法,在查询Person列表时通过Include方法预加载City关联数据即可,示例代码:
// 先引入EF Core所需命名空间 using Microsoft.EntityFrameworkCore; public IActionResult Index() { var people = _context.Persons .Include(p => p.City) // 新增该行,预加载关联的城市数据 .ToList(); return View(people); }
内容的提问来源于stack exchange,提问作者wiedersehen
相关产品推荐
相关产品推荐

