CS1061错误咨询:ASP.NET MVC中List<T>无EmpModels定义的排查
错误原因&解决方法
嘿,这个CS1061错误其实很好排查,核心问题就是视图声明的模型类型和控制器传递的模型类型完全不匹配:
- 你在控制器的
GetAllEmployees方法里,最后返回的是View(empDet),这里的empDet是EmpDetails类型——这个类里确实有EmpModels这个List<EmpModel>属性。 - 但你的视图开头写的是
@model List<CDMA_SSO.Models.EmpModel>,相当于告诉视图“我接收的模型就是一个员工列表”,可List<T>本身根本没有EmpModels这个成员,编译器自然会报错找不到啦。
下面给你两种可行的修正方案,按需选择就行:
方案一:修正视图的模型类型(更推荐)
既然控制器传的是EmpDetails对象,那视图就应该把模型声明为这个类型,之后正常访问它的EmpModels属性就行:
@model CDMA_SSO.Models.EmpDetails @foreach (var item in Model.EmpModels) { @Html.DisplayFor(model => item.empname) }
方案二:修正控制器的返回模型
如果你更希望视图直接接收员工列表,那可以修改控制器的返回逻辑,把生成的List<EmpModel>直接传给视图:
public ActionResult GetAllEmployees(EmpDetails empDet) { connection(); SqlCommand com = new SqlCommand("spEmployeeDetails", con) { CommandType = CommandType.StoredProcedure }; SqlDataAdapter da = new SqlDataAdapter(com); DataTable dt = new DataTable(); con.Open(); da.Fill(dt); con.Close(); // 直接生成员工列表 var empList = (from DataRow dr in dt.Rows select new EmpModel() { id = Convert.ToInt32(dr["id"]), empname = Convert.ToString(dr["empname"]) }).ToList(); // 返回列表而非EmpDetails对象 return View(empList); }
这时候视图的@model List<CDMA_SSO.Models.EmpModel>声明是正确的,遍历的时候直接用Model即可:
@model List<CDMA_SSO.Models.EmpModel> @foreach (var item in Model) { @Html.DisplayFor(model => item.empname) }
内容的提问来源于stack exchange,提问作者mukesh mariyala
相关产品推荐
相关产品推荐

