传入字典的模型项的类型为'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'.
当前您正在尝试传入一个模型,这是一个查询,而您的视图期望一个单个模型对象。目前你对无效的检查也是毫无意义的——Where
的结果永远不会是null
…这只是一个查询。
相反,您应该使用SingleOrDefault
,它*执行查询,获得单个值:
var item = db.Destinations.SingleOrDefault(i => !i.Hidden && i.Id == id);
现在检查是否为空将是有用的(因为如果没有结果,SingleOrDefault
将返回null
),并且类型将对视图是正确的。