【发布时间】:2021-06-12 07:16:47
【问题描述】:
首先让我说,我知道还有其他方法可以做到这一点,而且我已经通过其他方式成功地做到了。但我想知道如何在视图中使用@model IEnumerable<dynamic>。
我在控制器中试过这个:
var result = from p in _db.People
join ps in _db.PersonSport on p.PersonId equals ps.PersonIdfk
join s in _db.Sports on ps.SportCodeFk equals s.SportCode
orderby s.SportName
where p.LastName == "Orr"
select new { p.FirstName, p.LastName, s.SportName };
return View(result);
在视图中有这个:
@model IEnumerable<dynamic>
<h4>Sports played by @Model.First().FirstName @Model.First().LastName:</h4>
@foreach (var item in Model) {
@item.SportName;<br />
}
我得到一个运行时错误
RuntimeBinderException:“object”不包含“FirstName”的定义
<h4> 处的断点表明该模型具有数据:
我尝试使用创建结果作为new ExpandoObject() 并得到同样的错误。
我是不是离基地太远了,还是在尝试一些不可能的事情?我在考虑一个用例,您有许多表列但只提取了一些列。是的,我知道我可以创建一个类并这样做,或者在 ViewModel/ViewData 中发送数据,但我想知道这是否是一个选项。
【问题讨论】:
-
如果在 LINQ 中添加
.ToList<dynamic>()会发生什么?或将return View(result);更改为return View(result.ToList<dynamic>());。或者把new { p.FirstName, p.LastName, s.SportName }改成(dynamic)new { p.FirstName, p.LastName, s.SportName } -
感谢您的建议。我尝试了所有这些,它们给出了相同的结果。实际上,第二个选项 (
return View(result.ToList<dynamic>());) 给出了一个不同的运行时错误,说明该对象不包含 ToList 的方法,但其他两个给出的错误消息与之前相同。 -
嗨@A.McDonald,有什么更新吗?如果我的回答帮助您解决了您的问题,请记得接受作为答案?如果没有,请您跟进让我知道吗?参考:@ 987654322@.Thanks.
标签: c# visual-studio entity-framework-core asp.net-core-mvc dynamic-view