You need to enable JavaScript to run this app. ASP.NET MVC合并双模型为ViewModel后Razor视图类型不匹配报错处理
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC合并双模型为ViewModel后Razor视图类型不匹配报错处理

问题原因及解决方案

你遇到的类型不匹配错误主要由以下几个问题导致,按优先级修正即可:

1. 拼写不一致问题

你的代码中存在多处Security拼写错误:

  • Employee实体中的导航属性写为KeyBySecurtiyDepartment(缺少字母c,正确拼写为Security)
  • 错误提示中的KeySecurtiyDepartment也为拼写错误
  • 请确认ViewModel类名、控制器中引用的类名拼写完全一致,拼写错误会导致框架识别类型时出现偏差,误以为你传递的是实体类集合而非ViewModel。

2. 控制器变量大小写错误

你控制器代码中定义员工集合的变量名为大写开头的Employees,但给ViewModel赋值时用了小写的employees:

// 原错误代码
var Employees = db.Employees.Where(q => q.retired == false).ToList();
keyBySecurityDepartmentViewModel.employee= employees;

C#大小写敏感,你这里实际赋值时用的employees未定义,会导致编译失败,如果是粘贴代码时手误修正即可,确保变量名一致。

3. 实体类属性命名不合法

KeyBySecurityDepartment实体中存在大量数字开头的属性名:

// 错误命名,C#属性不能以数字开头
public bool 11Door { get; set; }
public bool 111PostalBox { get; set; }

这类命名不符合C#语法规范,会导致模型绑定、序列化等操作异常,修改为合法命名后通过Column注解映射数据库原字段即可:

[Column("11Door")]
public bool Door11 { get; set; }
[Column("111PostalBox")]
public bool PostalBox111 { get; set; }

4. 排查视图调用逻辑

如果以上问题都修正后还是报错,确认你没有其他重载的Index操作方法返回了List<KeyBySecurityDepartment>类型,也没有在其他地方调用该视图时传递了错误的模型参数。

修正完成后代码即可正常运行,视图可以正常遍历Model.employee输出员工编号。


内容的提问来源于stack exchange,提问作者Younesitoo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 06:45:03