查询显示错误

时间:2018-08-16 17:04:52

标签: 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.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>
}

错误是:

处理请求时发生未处理的异常。 RuntimeBinderException:“对象”不包含“ Identificador”的定义 CallSite.Target(Closure,CallSite,object)

2 个答案:

答案 0 :(得分:1)

在剃须刀页面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();

    }

在cshtml中:

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

        </tr>
    }

答案 1 :(得分:0)

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