1

我正在实体框架中进行左外连接并将输出发送到表中ViewBag以显示在表中。但是,a 中不显示任何内容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'

但是,当我将鼠标悬停itemforeach循环内部时,我可以清楚地看到它就在那里。

4

1 回答 1

1

我的问题在这里得到了回答:动态类型在 mvc 视图中

您不能将匿名类型用作模型。原因是编译器将匿名类型作为内部发出。这意味着它们只能通过当前程序集访问。但正如您所知,Razor 视图由 ASP.NET 运行时编译为单独的程序集,无法使用这些匿名类型。

显然,在这种情况下正确的方法是使用视图模型。

所以,我将只使用视图模型。

更多关于此的重要信息在这里:Razor 中的动态匿名类型导致 RuntimeBinderException

于 2013-06-17T18:19:42.780 回答