[英]Passing entity framework query to view error
我刚刚使用实体框架代码优先方法创建了一个数据库。
这是我的模态课
public class MobileProduct
{
[Key]
public int p_id { get; set; }
public string p_name { get; set; }
public string p_description { get; set; }
public string p_price { get; set; }
}
这是我的DbContext派生类
public class Entities : DbContext
{
public DbSet<MobileProduct> Mobiles { get; set; }
}
我刚刚创建了一个查询,以通过操作方法传递此数据视图
Entities db = new Entities();
public ActionResult Mobiles()
{
var q = from n in db.Mobiles
select n;
return View(q);
}
这是我的看法
@model HomeShopping.Models.MobileProduct
@{
ViewBag.Title = "Mobiles";
}
<h2>Mobiles</h2>
访问视图时出现错误 :
传递到字典中的模型项的类型为'System.Data.Entity.Infrastructure.DbQuery`1 [HomeShopping.Models.MobileProduct]',但是此字典需要类型为'HomeShopping.Models.MobileProduct'的模型项。
说明:执行当前Web请求期间发生未处理的异常。 请查看堆栈跟踪,以获取有关错误及其在代码中起源的更多信息。
异常详细信息:System.InvalidOperationException:传递到字典中的模型项的类型为“ System.Data.Entity.Infrastructure.DbQuery`1 [HomeShopping.Models.MobileProduct]”,但是此字典需要模型项为“ HomeShopping”。 Models.MobileProduct”。
我假设您要向视图发送MobileProduct列表? 如果是这样的话; 将您的模型更改为
@model IEnumerable<HomeShopping.Models.MobileProduct>
@{
ViewBag.Title = "Mobiles";
}
<h2>Mobiles</h2>
当前,您的模型仅需要一个MobileProduct类型的实例,而您的Mobiles操作正在创建MobileProduct的列表。 您还需要通过对操作执行ToList()来评估该操作中的查询。
public ActionResult Mobiles()
{
var q = from n in db.Mobiles
select n;
return View(q.ToList());
}
您没有实现查询,因此将查询本身(而不是查询结果)发送到视图。
var q = (from n in db.Mobiles
select n).ToList();
return View(q);
正如daveL发布的那样,您还需要在视图中更改模型的定义。
@model IEnumerable<HomeShopping.Models.MobileProduct>
尚未测试,但尝试将模型定义为:
@model IQuerable<HomeShopping.Models.MobileProduct>
如果那不起作用,那么也许:
@model IEnunerable<HomeShopping.Models.MobileProduct>
...对象返回为:
View(q.ToList());
您将查询保存到q,而不是查询的评估。 如果期望多个结果,则需要一个ToList()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.