ASP.NET MVC中Search()方法返回Index视图触发空引用异常
问题根源
你的Index视图是强类型视图,绑定了HomeViewModel类型的模型,页面渲染下拉框时需要读取Model.Airports属性的值。但你在Search方法执行完返回View("Index")的时候,没有给视图传入对应的HomeViewModel实例,导致视图拿到的Model为null,遍历Model.Airports时就触发了空引用异常。
修复方案
1. 修正Search方法代码
返回Index视图时,和Index方法一样构造传入HomeViewModel实例,可选择继续用ViewBag存航班结果,也可以把搜索结果直接放进ViewModel更规范:
public IActionResult Search(SearchQuery FormData) { List<Flight> flights = (from flight in _context.Flights where flight.FlightDateTime.Date == FormData.PreferredFlightTime.Date && flight.ArrivalAirportId == FormData.ArrivalAirportId && flight.DepartureAirportId == FormData.DepartureAirportId select flight).ToList(); // 构造视图必须的模型实例 HomeViewModel mymodel = new HomeViewModel(); mymodel.Airports = GetAirports(); // 保留原逻辑用ViewBag存搜索结果 ViewBag.FlightSearchResults = flights; // 传入模型返回视图 return View("Index", mymodel); }
2. 修复视图代码的语法错误
你当前视图里出发机场下拉框的name属性书写错误,多了多余的大括号,会导致表单提交时出发机场ID无法正常传到后台:
把原代码里的<select name=" {DepartureAirportId" class="form-control">
修改为<select name="DepartureAirportId" class="form-control">
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

