cshtml页面无法加载Participant列表 报模型类型不匹配错误
问题根因
这个报错是父视图(Dashboard.cshtml)声明的预期模型类型,和控制器实际返回的模型类型不匹配导致的,和你嵌套的局部视图没有直接关系:
- 你的
Dashboard控制器方法返回的是List<Participant>类型对象 - 但Dashboard.cshtml顶部的模型声明是
@model LeagueProject.Models.ViewModel,要求接收ViewModel类型的入参 - ASP.NET Core MVC运行时会校验视图入参类型,匹配失败就抛出该异常。你之前的项目能正常运行,必然是当时父视图声明的模型类型和控制器返回的类型完全一致。
两种可选解决方案
根据你的业务需求选择对应修改方式即可:
方案1:控制器返回匹配父视图要求的ViewModel类型
如果你需要Dashboard视图承载多份数据、确实要用到ViewModel作为父模型,就修改控制器的返回逻辑,构造ViewModel实例后再传给视图:public IActionResult Dashboard() { // 查询参与者列表 List<Participant> participantList = _yourDbContext.Participants.ToList(); // 构造视图要求的ViewModel实例 var viewModel = new LeagueProject.Models.ViewModel { // 替换为你ViewModel里对应存储参与者列表的属性名 ParticipantList = participantList }; // 返回构造好的ViewModel return View(viewModel); }调用局部视图时要显式传入参与者列表属性,不要漏传:
@* 第二个参数就是传给局部视图的模型 *@ @await Html.PartialAsync("_YourPartialViewName.cshtml", Model.ParticipantList)方案2:修改父视图的模型声明匹配控制器返回类型
如果你Dashboard视图只需要用到参与者列表这一份数据,直接修改Dashboard.cshtml顶部的模型声明即可:@model List<LeagueProject.Models.Participant>之后调用局部视图直接传父视图的Model即可:
@await Html.PartialAsync("_YourPartialViewName.cshtml", Model)
排查注意事项
如果修改后仍报相同错误,优先排查两个点:一是类名、命名空间、属性名有没有拼写错误;二是调用局部视图时有没有传第二个模型参数,不传的话局部视图会默认复用父视图的模型,也会触发类型不匹配报错。
内容的提问来源于stack exchange,提问作者Jgrewall
相关产品推荐
相关产品推荐

