我是MVC框架工作的新手。我正在制作一个页面,通过点击详细信息链接按钮,我们可以看到部门的详细信息。
当用户单击链接按钮时,它会获取列表集合中特定部门的所有记录并重定向到详细信息视图。数据已在列表中获取但在转到详细信息视图时会生成以下错误:
传递到字典中的模型项的类型为“System.Collections.Generic.List
1 [DocPageSys.Models.Interfaces.DepartmentInfo] ', but this dictionary requires a model item of type '
DocPageSys.Models.Interfaces.DepartmentInfo`'。
我理解错误,但解决它的困惑。并坚持这个问题...
答案 0 :(得分:3)
由于Details
视图强类型为DepartmentInfo
:
@model DocPageSys.Models.Interfaces.DepartmentInfo
您需要从控制器操作而不是列表中传递它的单个实例:
public ActionResult Details(int id)
{
DepartmentInfo depInfo = db.Departments.FirstOrDefault(x => x.Id == id);
return View(depInfo);
}
因此,请确保在从控制器操作调用return View()
方法时,您正在传递从数据存储中提取的单个DepartmentInfo
实例。
为了让它最初运行良好,您可以简单地对其中的某些值进行硬编码:
public ActionResult Details(int id)
{
var depInfo = new DepartmentInfo
{
Id = 1,
Name = "Sales",
Manager = "John Smith"
}
return View(depInfo);
}
哦,你会注意到我没有使用任何ViewData / ViewBag。你不需要它。由于它们的弱的性质,它使事情看起来非常难看。我建议你总是使用视图模型。
答案 1 :(得分:0)
此错误告诉您,您正在将列表传递给视图,但应该传递单个实体对象实例。
如果您确实获取了一个项目但是在列表中,您可以轻松地执行以下操作:
return View(result[0]);
或更强大的代码:
if (result != null && result.Count == 1)
{
return View(result[0]);
}
return RedirectToAction("Error", "Home");
答案 2 :(得分:0)
当控制器操作传递给视图的数据与视图所期望的数据类型不匹配时,通常会发生此错误。
在这种情况下,当您的视图需要单个项目时,它看起来好像是在传递一个DepartmentInfo项目列表。