在ASP.NETMVC5中使用Linq从数据库检索数据时,如何将对象列表从控制器传递到视图
我试图将对象列表从控制器传递到视图,在视图中使用LINQ从数据库检索对象的属性。型号代码如下所示:在ASP.NETMVC5中使用Linq从数据库检索数据时,如何将对象列表从控制器传递到视图,linq,asp.net-mvc-5,Linq,Asp.net Mvc 5,我试图将对象列表从控制器传递到视图,在视图中使用LINQ从数据库检索对象的属性。型号代码如下所示: public class Department { [Key] public int DepartmentId { get; set; } [Required(ErrorMessage = "Enter Department Name")] [DisplayName("Department Name")]
public class Department
{
[Key]
public int DepartmentId { get; set; }
[Required(ErrorMessage = "Enter Department Name")]
[DisplayName("Department Name")]
public string DepartmentName { get; set; }
}
控制器代码为:
public ActionResult ShowDepartments()
{
var departmentList = db.Deapartment.Select(x => new
{
x.DepartmentId,
x.DepartmentName
}).ToList();
return View(departmentList);
}
视图代码为:
@model List<PractiseMVC11_17_2017.Models.Department>
@{
ViewBag.Title = "ShowDepartments";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Show Departments</h2>
<div>
<table class="table table-bordered table-hover">
<tbody>
@foreach (var department in Model)
{
<tr>
<td>
@department.DepartmentId
</td>
<td>
@department.DepartmentName
</td>
</tr>
}
</tbody>
</table>
</div>
}
但当我运行该项目时,它显示以下异常:
异常详细信息:System.InvalidOperationException:传递到字典的模型项的类型为“System.Collections.Generic.List1[f_uAnonymousType32[System.Int32,System.String]]”,但此字典需要类型为“System.Collections.Generic.List`1[PracticesmVC11_17_2017.Models.Department]的模型项“。您的视图被强类型化为Department类对象的集合。但是在您的操作方法中,您正在使用此代码创建一个新的匿名对象列表
db.Deapartment.Select(x => new
{
x.DepartmentId,
x.DepartmentName
})
这里,您正在为db.dePartment集合中的每个项创建一个具有DepartmentId和DepartmentName属性的匿名对象。您正在向视图传递上述代码的结果,这是一个匿名对象列表。您的视图现在得到的类型与它的强类型不同,因此您得到的是异常
因此,只需将ToList传递给db.department并将其传递给视图
public ActionResult ShowDepartments()
{
var departmentList = db.Deapartment.ToList();
return View(departmentList);
}
这里departmentList变量将是department对象的集合。Shyju answer有效,因为传递给视图的对象恰好与数据库对象相同。情况并非总是如此,事实上,如果不是这样,情况会更好 正确的处理方法是创建命名对象:
var departmentList = db.Deapartment.Select(x => new Department
{
x.DepartmentId,
x.DepartmentName
}).ToList();
我会使用LINQ语法,但lambda语法也同样适用
var departmentList =
(from x in db.Deapartment
select new Department
{
x.DepartmentId,
x.DepartmentName
}).ToList();