我想从我的控制器传递数据到视图。 这是控制器的代码
public ActionResult AllCars()
{
try
{
int id = System.Web.HttpContext.Current.User.Identity.GetUserId<int>();
var reservedCars = (from c in db.Cars
join o in db.Orders on c.Car_Id equals o.Car_Id
join u in db.AspNetUsers on o.Id equals u.Id
where u.Id == 5
select new
{
c.Car_Description,
c.Car_Id,
c.CarMakeId,
c.CarModelId,
c.Reservation_Status,
c.Color
});
return View(reservedCars);
}
catch (Exception)
{
throw;
}
}
这是我的视图文件。
@model IEnumerable<FinalProject.Models.ReservedCar>
<table>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Car_Id);
</td>
</tr>
}
</table>
但是当我运行我的视图时出现以下错误 传递到字典中的模型项的类型为'System.Data.Entity.Infrastructure.DbQuery,但此字典需要类型为'System.Collections.IEnumerable`的模型项
我知道我将dbquery结果传递给视图,我的视图期望它将是iEnumerable。 请指导我如何完成这项任务。我只是想将查询结果传递给我的视图并想要使用它。
ModelClass。 ReservedCar.cs
namespace FinalProject.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
public partial class ReservedCar
{
public int Id { get; set; }
public string Car_Description { get; set; }
public int Car_Id { get; set; }
public string CarMakeId { get; set; }
public string CarModelId { get; set; }
public string Reservation_Status { get; set; }
public string Color { get; set; }
}
}
答案 0 :(得分:3)
目前reservedCars
仍然是IQueryable
类型的查询表达式。它还没有被评估/执行。因此,reservedCars
的类型与您的视图强类型的类型(IEnumerable<ReservedCar>
)不同。这就是您遇到类型不匹配错误的原因。
确保您返回ReservedCar
课程的集合。您可以更新LINQ表达式的投影部分,以将结果投影到ReservedCar
而不是匿名对象。同时在查询上调用ToList()
方法,该方法将执行查询表达式并返回该结果。
var reservedCars = (from c in db.Cars
join o in db.Orders on c.Car_Id equals o.Car_Id
join u in db.AspNetUsers on o.Id equals u.Id
where u.Id == 5
select new ReservedCarVm
{
CarId = c.Car_Id,
Description = c.Car_Description,
Color = c.Color
// Map other properties as needed.
}).ToList();
return View(reserverCars);
假设您的ReservedCarVm
课程具有Color
,Car_Description
和Car_Id
属性,这些属性与Car
实体类中的属性相同,如下所示
public class ReservedCarVm
{
public string Color { set;get;}
public string Description { set;get;}
//Add other properties needed by the view here
}
现在确保您的视图强烈输入此视图模型类的集合
@model IEnumerable<ReserverdCarVm>
@foreach(var item in Model)
{
<p>@item.CarId</p>
<p>@item.Color</p>
}
答案 1 :(得分:0)
你可以这样做:
而不是@model IEnumerable&lt; FinalProject.Models.ReservedCar&GT;
你可以做@model IQueryable&lt; FinalProject.Models.ReservedCar&GT;
以上不推荐,你不应该直接从视图中调用数据库,我没有看到任何理由这样做。
另外你需要处理dbcontext,在你提供的代码中,你没有处理不好的dbconext
只需通过此
重做您的代码var reservedCars = (from c in db.Cars
join o in db.Orders on c.Car_Id equals o.Car_Id
join u in db.AspNetUsers on o.Id equals u.Id
where u.Id == 5
select new
{
c.Car_Description,
c.Car_Id,
c.CarMakeId,
c.CarModelId,
c.Reservation_Status,
c.Color
}).ToList();
db.Dispose();