我在Entity Framework中进行左外连接,并在ViewBag
中发送输出以显示在表中。但是,View
中不显示任何内容。我的代码如下。
var clients = db.Client
.Include("ClientInformation")
.Where(t => t.IsApplicationRegistered == false)
.Take(20);
var q = (from c in clients
join a in db.Agent
on c.AgentUserId equals a.AgentUserId into jointable
from x in jointable.DefaultIfEmpty()
select new
{
c.ClientId,
c.ClientInformation.FirstName,
c.ClientInformation.FamilyName,
c.ClientInformation.Address,
AgentFirstName = x.FirstName,
AgentLastName = x.LastName
}).ToList();
ViewBag.clients = q;
这将检索结果(我可以在调试期间通过IntelliSense查看它们),但视图不显示任何内容。示例视图如下所示。
@foreach (dynamic item in ViewBag.clients)
{
<tr>
<td>@item.FirstName @item.FamilyName</td>
<td>@item.Address</td>
<td>@item.AgentFirstName @item.AgentLastName</td>
</tr>
}
有什么想法吗?感谢。
更新
在View
内,我收到了异常
'object' does not contain a definition for 'FirstName'
但是,当我将鼠标悬停在item
圈内的foreach
时,我可以清楚地看到它存在。
答案 0 :(得分:1)
我的问题在这里得到了解答:dynamic type in mvc view
您不能将匿名类型用作模型。原因是编译器将匿名类型作为内部发出。这意味着只能使用当前程序集访问它们。但正如您所知,Razor视图由ASP.NET运行时编译为单独的程序集,无法使用这些匿名类型。
显然,在这种情况下,正确的方法是使用视图模型。
所以,我只会使用一个View Model。
有关这方面的更多信息,请访问:Dynamic Anonymous type in Razor causes RuntimeBinderException