MVC 3详细信息视图

时间:2011-11-21 08:14:14

标签: asp.net-mvc-3

我是MVC框架工作的新手。我正在制作一个页面,通过点击详细信息链接按钮,我们可以看到部门的详细信息。

当用户单击链接按钮时,它会获取列表集合中特定部门的所有记录并重定向到详细信息视图。数据已在列表中获取但在转到详细信息视图时会生成以下错误:

传递到字典中的模型项的类型为“System.Collections.Generic.List 1 [DocPageSys.Models.Interfaces.DepartmentInfo] ', but this dictionary requires a model item of type ' DocPageSys.Models.Interfaces.DepartmentInfo`'。

我理解错误,但解决它的困惑。并坚持这个问题...

3 个答案:

答案 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项目列表。