我无法使用匿名类型查询视图中的信息

时间:2018-12-28 01:15:38

标签: c# asp.net-mvc anonymous-types

好吧,我做了一个Linq查询,即数据库的前5名,我可以按预期将查询发送到视图,但是当我尝试访问其字段时,它说我的“对象”没有那些参数,甚至在我看到它们到达前一个周期时,我都在图像上显示

My view

   @foreach (var item in ViewBag.TOPEMPRESASMAISPROCURADAS)
                {
                    <tr>
                        <td>@item.Nome</td>
                        <td>@item.Numero_Estagios</td>
                    </tr>
                }

我的控制器:

 ViewBag.TOPEMPRESASMAISPROCURADAS = Empresas.Select(emp => new { emp.Nome, Numero_Estagios = Estagios
                .Where(x => x.Empresa.EmpresaID == emp.EmpresaID && x.AnoLetivo == AnoLetivo).Count() })
                .OrderBy(y => y.Numero_Estagios).Take(5);

好吧,正如您所看到的,foreach正在接收项目及其信息,但是我不能使用item.Nome或item.NumeroEstagios,为什么?我真的很乐意得到帮助,我是新手。谢谢

1 个答案:

答案 0 :(得分:2)

如果要使用 Model -View-Controller模式,则实际上应该create a Model代表您希望View呈现的数据。应该避免使用ViewBag。

public class MyClass
{ 
  public <type> Nome { get; set; }
  public <type> Numero_Estagios { get; set; }
}

public class IndexVM
{
  public IEnumerable<MyClass> items { get; set; }
}

然后

var model = new IndexVM
{
  items = Empresas
    .Select(emp => new MyClass { 
        Nome = emp.Nome, 
        Numero_Estagios = Estagios.Where(x => x.Empresa.EmpresaID == emp.EmpresaID && x.AnoLetivo == AnoLetivo).Count() 
    })
    .OrderBy(y => y.Numero_Estagios)
    .Take(5)
    .ToList()
}

return View(model);

并在您看来:

@model IndeVM

@foreach (var item in Model.Items)
{
  <tr>
    <td>@item.Nome</td>
    <td>@item.Numero_Estagios</td>
  </tr>
}