将实体框架查询传递给视图错误

本文关键字:视图 错误 实体 框架 查询 | 更新日期: 2023-09-27 18:17:20

我刚刚用实体框架代码优先方法创建了一个数据库。

这是我的模式类

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[homeshoping . models . model]。,但是这个字典需要一个类型为' homeshoping . models .MobileProduct'的模型项。

描述:当前web请求执行过程中出现未处理的异常。请查看堆栈跟踪以获得有关错误及其在代码中的起源位置的更多信息。

Exception Details: System。InvalidOperationException:传入字典的模型项的类型是'System.Data.Entity.Infrastructure.DbQuery ' 1[homeshoping . models . model]。,但是这个字典需要一个类型为' homeshoping . 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()。