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

ASP.NET视图模型类型不匹配异常求助

ASP.NET请求处理时的InvalidOperationException异常排查与解决

在ASP.NET项目处理请求时触发未处理的InvalidOperationException,错误提示:传入ViewDataDictionary的模型类型为System.Linq.Enumerable+WhereListIterator1[TicketsUA.Models.Tickets],但该ViewDataDictionary需要TicketsUA.Models.Tickets`类型的模型。

测试项目中直接用ToListAsync()在Index页显示所有数据正常,但原项目中FindTickets方法查询后返回结果到声明为@model IEnumerable<TicketsUA.Models.Tickets>的视图时,问题仍然存在。

相关控制器代码

public async Task<IActionResult> FindTickets(Tickets tickets)
{
    var AllTickets = await _tickets.GetAll();
    var find = AllTickets.Where(ti => ti.StartAirport == tickets.StartAirport && ti.EndAirport == tickets.EndAirport);
    return View(find); 
}

相关视图声明

@model IEnumerable<TicketsUA.Models.Tickets>

排查与解决步骤

  • 确认视图匹配:检查FindTickets方法返回的视图是否为目标视图(若未指定视图名称,默认返回同名的FindTickets.cshtml),确保该视图的模型声明确实是IEnumerable<TicketsUA.Models.Tickets>,而非单个Tickets对象。
  • 转换查询结果为具体集合:Where方法返回的是延迟执行的迭代器类型,将其转换为List<T>后再传递给视图,确保类型匹配:
    var find = AllTickets.Where(ti => ti.StartAirport == tickets.StartAirport && ti.EndAirport == tickets.EndAirport).ToList();
    return View(find);
    
  • 检查同名视图冲突:确认项目中不存在其他文件夹下的同名视图,避免控制器错误返回了模型声明不同的视图。
  • 验证数据源返回类型:确认_tickets.GetAll()方法返回的是IEnumerable<Tickets>或其派生类型,不存在返回单个Tickets对象的情况。

内容的提问来源于stack exchange,提问作者Роман Парсанов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:04:56