传入字典的模型项的类型为'System.Data.Entity.Infrastructure.DbQuery

本文关键字:System Data Entity Infrastructure DbQuery 字典 模型 类型 | 更新日期: 2023-09-27 18:09:40

我想从我的数据库中获取记录,其中隐藏=false和id在浏览器中获得。请看到我的代码和修复为我,感谢这么多(我搜索,但不能修复我的错误)。我的行动:

public ActionResult Detail(int id = 0)
    {
        var item = db.Destinations.Where(i=>i.Hidden==false && i.Id==id);
        if (item==null)
        {
            return HttpNotFound();
        }
        return View(item);
    }

我的观点:

@model vtt.Models.Destination
    @{
    ViewBag.Title = "Detail";
    }
    <div class="white">
     <h1>@Model.Name</h1>
     @Html.Raw(Model.Description)
    </div>

And Error:

 The model item passed into the dictionary is of type
        'System.Data.Entity.Infrastructure.DbQuery`1[vtt.Models.Destination]', but this dictionary
        requires a model item of type 'vtt.Models.Destination'.

传入字典的模型项的类型为'System.Data.Entity.Infrastructure.DbQuery

当前您正在尝试传入一个模型,这是一个查询,而您的视图期望一个单个模型对象。目前你对无效的检查也是毫无意义的——Where的结果永远不会是null…这只是一个查询。

相反,您应该使用SingleOrDefault,它*执行查询,获得单个值:

var item = db.Destinations.SingleOrDefault(i => !i.Hidden && i.Id == id);

现在检查是否为空将是有用的(因为如果没有结果,SingleOrDefault将返回null),并且类型将对视图是正确的。