Asp.net 查询显示错误

Asp.net 查询显示错误,asp.net,entity-framework,asp.net-core,Asp.net,Entity Framework,Asp.net Core,装载和显示此查询时出错 var itens = _context.ContasReceber .Include(x => x.Pessoas) .Include(x => x.PlanosServicos) .Select(c => new { Identificador = c.Pessoas.NIdentificador, NomePessoa = c.Pessoas.Nome, c.Observacao, c.Ven

装载和显示此查询时出错

var itens = _context.ContasReceber
  .Include(x => x.Pessoas)
  .Include(x => x.PlanosServicos)
  .Select(c => new
  {
     Identificador = c.Pessoas.NIdentificador,
     NomePessoa = c.Pessoas.Nome,
     c.Observacao,
     c.Vencimento,
     c.Valor,
     c.Quitado,
     c.DataPagamento,
     c.ValorPago
    })
    .ToList();
    ViewData["Contas"] = itens;
cshtml:

@foreach (var item in ViewBag.Contas)
 {
    <tr>
      <th>
          @item.Identificador              
      </th>
       <th>
          @item.NomePessoa
       </th>
       <th>
          @item.Observacao
        </th>
        <th>
          @item.Vencimento
        </th>
        <th>
          @item.Quitado
        </th>
         <th>
          @item.DataPagamento
         </th>
         <th>
            @item.ValorPago
         </th>
     </tr>
}
@foreach(ViewBag.Contas中的变量项)
{
@项目识别器
@项目1.1
@项目.观测
@项目:文西门托
@项目.基塔多
@项目1.DataPagamento
@项目1.ValorPago
}
错误是:

处理请求时发生未处理的异常。 RuntimeBinderException:“对象”不包含“Identificator”的定义
CallSite.Target(闭包、调用站点、对象)

当迭代项
foreach(ViewBag.Contas中的var项)
时,
项的类型是
对象。默认情况下,对象没有属性。由于您使用的是匿名类型,因此可以将foreach更改为
foreach(ViewBag.Contas中的动态项)
,这将允许您引用其属性,因为它将
视为类似于ViewBag的动态对象。

在razor pages PageModel中,您可以使用ViewModel返回自定义数据。 这里是演示的简化版本

在cshtml.cs中:

 public class ContasViewModel
    {
        public string Identificador { get; set; }
        public string NomePessoa { get; set; }
        public string Observacao { get; set; }
    }

    public IList<ContasViewModel> Contas { get; set; }

    public async Task OnGetAsync()
    {

        Contas = await _context.ContasReceber
          .Include(x => x.Pessoas)
          .Include(x => x.PlanosServicos)
          .Select(c => new ContasViewModel
          {
              Identificador = c.Pessoas.NIdentificador,
              NomePessoa = c.Pessoas.Nome,
              Observacao= c.Observacao

          }).ToListAsync();

    }
公共类ContasViewModel
{
公共字符串标识符{get;set;}
公共字符串{get;set;}
公共字符串observaco{get;set;}
}
公共IList Contas{get;set;}
公共异步任务OnGetAsync()
{
Contas=wait_context.ContasReceber
.包括(x=>x.Pessoas)
.包括(x=>x.planosservices)
.选择(c=>new ContasViewModel
{
Identificador=c.Pessoas.NIdentificador,
NomePessoa=c.Pessoas.Nome,
Observacao=c.Observacao
}).ToListAsync();
}
在cshtml中:

 @foreach (var item in Model.Contas)
    {
        <tr>
            <th>
                @item.Identificador
            </th>
            <th>
                @item.NomePessoa
            </th>
            <th>
                @item.Observacao
            </th>

        </tr>
    }
@foreach(Model.Contas中的变量项)
{
@项目识别器
@项目1.1
@项目.观测
}

连续收到相同错误:处理请求时发生未处理的异常。RuntimeBinderException:“对象”不包含“Identificator”调用站点的定义。目标(闭包、调用站点、对象)实际上它不是控制器,而是asp.net razor中的“PageModel”。在这种情况下,无法识别“ViewBag”elento。您遇到了问题。一个常见的解决方案是创建一个“ViewModel”,其中包含要在该特定视图中使用的属性,并将实体属性投影到其中。AutoMapper在这方面做得很好。